快速排序C语言版 #include<stdio.h> void quicksort(int *a, int left, int right); void swap(int *a,int i,int j); int partition(int *a, int left, int right); int main() { int a[]={81,94,11,96,12,35,17}; int N=sizeof(a)/sizeof(int); int i,j; quicksort(a, 0, N-1); for(i=0;i<N;i++) printf("%d ",a[i]); } //快排 void quicksort(int *a, int left, int right) { if (left < right) { int p = partition(a, left, right); quicksort(a, left, p - 1); quicksort(a, p + 1, right); } } //快排数组划分 int partition(int *a, int left, int right) { int x = a[right];//选择主元,选择最右边的一个 int p = left - 1;//保存了一个变量,记录比主元小的所有元素中,在序列中存放的位置最靠右的那个 for (int i = left; i < right; i++) {//从当前序列的第一个循环到倒数第二个(right-1)元素,来进行和主元比较。 if (a[i] <= x) { p++; swap(a, p, i);//把a[i]和a[p]交换,就是说把a[p]右边的元素和当前元素换位置 } } //循环结束,整个序列就变成了三部分,从a[left..p]是比主元小的元素,a[p+1..right-1]是比主元大的元素,a[right]则是主元。 swap(a, p+1, right); //将主元和比它大序列的第一个元素互换位置 return p+1; } //交换数组a中的a[i]和a[j] void swap(int *a,int i,int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; }