在算法导论的第七章,介绍了有关快速排序的算法。该算法其实是分治算法的一种。
分:将数组中的元素分成两部分和一个pivot;
治:递归的对两个子数组进行排序;
合:此时将数组遍历输出即可;
书中介绍的算法的主要思想如下:
1、首先将数组的第一个元素作为pivot,然后顺序的遍历该数组,将小于pivot的元素同当前位置的下一个位置的元素交换;
2、该过程直到遍历到数组最后一个元素为止,最终将小于pivot的元素放在其左侧,大于pivot的元素放在其右侧;
3、遍历输出数组。
这是我写的完整的c代码,以及测试结果:
#include<stdio.h> void QuickSort(int *a,int p,int q); int partition(int *a,int p,int q); int main() { int a[8]; int i; printf("请输入待排序元素:"); for(i=0;i<8;i++) { scanf("%d",&a[i]); } QuickSort(a,0,7); printf("排序后:"); for(i=0;i<8;i++) { printf("%d ",a[i]); } printf("\n"); return 0; } void QuickSort(int *a,int p,int q) { int r; if(p < q) { r = partition(a,p,q); QuickSort(a,p,r-1); QuickSort(a,r+1,q); } return; } int partition(int *a,int p,int q) { int i,j,t,x; x = a[p]; i =p; for(j=p+1;j<=q;j++) { if(a[j]<=x) { i = i + 1; t = a[i]; a[i] = a[j]; a[j] = t; } } t = a[i]; a[i] = a[p]; a[p] = t; return i; }