1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| #include <iostream> #include <cstdio> using namespace std;
void quick_sort(int arr[], int l, int r){ if(l >= r) return; int x = arr[l+r >> 1]; int i = l-1, j = r+1; while(i < j){ while(arr[++i] < x); while(arr[--j] > x); if(i < j) swap(arr[i], arr[j]); } quick_sort(arr, l, j); quick_sort(arr, j+1, r); }
int tmp[105]; void merge_sort(int arr[], int l, int r){ if(l >= r) return; int mid = (l + r)>>1; merge_sort(arr, l, mid); merge_sort(arr, mid+1, r); int i = l, j = mid+1, k = 0; while(i <= mid && j <= r){ if(arr[i] < arr[j]) tmp[k++] = arr[i++]; else tmp[k++] = arr[j++]; } while(i <= mid) tmp[k++] = arr[i++]; while(j <= r) tmp[k++] = arr[j++]; for(int i = 0; i < k; i++){ arr[l+i] = tmp[i]; } }
void heapify(int arr[], int r, int n){ int i = 2*r+1, j = 2*r+2; int mx = r; if(i < n && arr[i] > arr[mx]) mx = i; if(j < n && arr[j] > arr[mx]) mx = j; if(mx != r) { swap(arr[mx], arr[r]); heapify(arr, mx, n); } }
void heap_sort(int arr[], int n){ for(int i = n; i >= 0; i--){ heapify(arr, i, n); } for(int i = n-1; i >= 0; i--){ swap(arr[0], arr[i]); heapify(arr, 0, i); } }
int main(){ int arr[]{1,93,6,45,2,7,8,45,2123,239,0,3}; int n = 12; heap_sort(arr, n); for(int i = 0; i < n; i++) printf("%d ", arr[i]); puts(""); return 0; }
|