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 75 76 77 78 79 80 81 82 83 84 85 86 87
|
#define MAXN 100 int a[MAXN] = {5,5,6,9,5,2,3,6,5,4}; int stk[MAXN]; int top = 0;
void () { top = 0; } void Push(int x) { stk[top++] = x; } int Top() { return stk[top-1]; } void Pop() { --top; } int IsEmpty() { return top==0; }
int partition(int *a, int l, int r) { if(a == NULL || l < 0 || r <= 0 && l > r) return -1; int i = l, j = r; int axi = a[i]; while(i != j) { if(i < j && a[j] >= axi) --j; a[i] = a[j]; if(i < j && a[i] <= axi) ++i; a[j] = a[i]; } a[i] = axi; return i; }
void quickSort(int *a, int l, int r) { if(a == NULL || l < 0 || r <= 0 || l > r) return ; InitStack(); int i = l, j = r,k; Push(j); Push(i); while(!IsEmpty()) { i = Top(); Pop(); j = Top(); Pop(); if(i < j) { k = partition(a, i, j); if(k > i) { Push(k-1); Push(i); } if(k < j) { Push(j); Push(k+1); } } } }
int main() { int n = 10; quickSort(a, 0, n-1); for(int i = 0; i < n; ++i) printf("%dn",a[i]); return 0; }
|
近期评论