C/C++ 快速排序 quickSort
下面的动画展示了快速排序算法的工作原理。
快速排序图示:可以图中在每次的比较选取的key元素为序列最后的元素。
#include <stdio.h> #include <stdlib.h> void swap(int * x, int * y) { int tmp = *x; *x = *y; *y = tmp; } void printlist(int list[],int n) { int i; for(i=0;i<n;i++) printf("%d\t",list[i]); printf("\n"); } void quickSort(int* A, int start , int end) { if(A == NULL || start >= end) return; int key = A[start]; int left = start + 1; int right = end; while(left <= right)//×¢ÒâµÈºÅ { while(A[left] <= key && left <= right)//×¢ÒâµÈºÅ left ++; while(A[right] > key && left <= right)//×¢ÒâµÈºÅ right --; if(left < right) { //printf("swap %d & %d\n", A[left], A[right]); swap(&A[left], &A[right]); left++; right--; } } //printlist(A, end - start + 1); //printf("left %d righ %d\n", left, right); swap(&A[start], &A[right]); quickSort(A, start, left - 1); quickSort(A, left + 1, end); } void main() { const int MAX_ELEMENTS = 10; int list[MAX_ELEMENTS]; int i = 0; // ²úÉúÌî³äÐòÁеÄËæ»úÊý for(i = 0; i < MAX_ELEMENTS; i++ ){ list[i] = rand()%100; } printf("½øÐÐÅÅÐò֮ǰµÄÐòÁÐ:\n"); printlist(list,MAX_ELEMENTS); // sort the list using quicksort quickSort(list,0,MAX_ELEMENTS-1); // print the result printf("ʹÓÿìËÙÅÅÐòËã·¨½øÐÐÅÅÐòÖ®ºóµÄÐòÁÐ:\n"); printlist(list,MAX_ELEMENTS); }