- 快排
- #include<stdio.h>
- #include<stdlib.h>
- #include<time.h>
- #define MAX 100
- /*
- 快速排序算法的两个主要步骤,分割(Partition和QuickSort)
- */
- int Partition(int A[],int p,int q);
- int QuickSort(int A[],int p,int q);
- int test();
- int main()
- {
- test();
- return 0;
- }
- /*
- 一个很简单的测试函数
- */
- int test()
- {
- int a[MAX];
- int i;
- srand((int)time(0));
- for(i = 0;i<MAX;i++)
- {
-
- a[i] = rand();
- }
- for(i = 0;i<MAX;i++)
- printf("%d\t",a[i]);
- printf("\n");
- QuickSort(a,0,MAX-1);
- for(i = 0;i<MAX;i++)
- printf("%d\t",a[i]);
- printf("\n");
- }
- /*
- Partition步骤中哨兵选取的是最后一个元素作为哨兵
- */
- int Partition(int A[],int p,int q)
- {
- int i,j,x,t;
- x = A[q];
- i = p-1;
- for (j = p;j<=q;j++)
- if(A[j] < x)
- {
- i++;
- t = A[j];
- A[j] = A[i];
- A[i] = t;
- }
- A[q] = A[i+1];
- A[i+1] = x;
- return i+1;
- }
- /*
- 递归调用的QuickSort程序
- */
- int QuickSort(int A[],int p,int r)
- {
- if(p<r)
- {
- int q = Partition(A,p,r);
- QuickSort(A,p,q-1);
- QuickSort(A,q+1,r);
- }
- }
复制代码 |