快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
快速排序的划分过程还有一个作用就是可以用来寻找中位数
以下是其C语言源码实现
#include "stdio.h" #include "stdlib.h" #include "sort.h" int partition(int* array,int low,int high) { int i=0; int pivot = array[low]; while(low < high) { while(low<high && array[high] >= pivot ) { high--; } if(low < high) { array[low++] = array[high]; } while(low<high && array[low] <= pivot) { low++; } if(low < high) { array[high--] = array[low]; } } array[low] = pivot; printf("partition--- and pivot is %d /n",pivot); for(;i<5;i++) { printf("%d ",array[i]); } printf("/n"); return low; } void qsort(int *array,int low,int high) { int i; if(low < high) { i = partition(array,low,high); qsort(array, low, i-1); qsort(array, i+1, high); } } int kthsort(int *array,int low,int high,int k) { int i; if(low < high) { i= partition(array,low,high); if(i==k) return i; else if(k < i ) kthsort(array,low, i-1,k); else kthsort(array,i+1,high,k); } } void qsorttest() { int array[5] = {5,7,8,3,2}; int len= 5; int i=0; printf("%d /n",len); for(i=0; i< len; i++) { printf("%d ",array[i]); } printf("Hello World!/n"); qsort(array,0,4); printf("Hello World!/n"); for(i=0; i< len; i++) { printf("%d ",array[i]); } printf("Hello World!/n"); } void kthsorttest() { int array[5] = {5,7,8,3,2}; int len= 5; int i=0; printf("%d /n",len); for(i=0; i< len; i++) { printf("%d ",array[i]); } printf("The result is %d /n",array[kthsort(array,0,4,3)]); }