快速排序是对冒泡排序的一种改进。
基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
假设要排序的数组是A[1]……A[N],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。一趟快速排序的算法是:
1)设置两个变量I、J,排序开始的时候 I=0,J=N-1;
2)以第一个数组元素作为关键数据,赋值给X,即X=A[0];
3)从J开始向前搜索,即由后开始向前搜索,找到第一个小于X的值,两者交换;
4)从I开始向后搜索,即由前开始向后搜索,找到第一个大于X的值,两者交换;
5)重复第3、4步,直到I=J;
1 #include <stdio.h> 2 3 void quicksort(int arr[], int minIndex, int maxIndex) 4 { 5 int i = minIndex; 6 int j = maxIndex; 7 int temp = arr[i]; 8 9 if(minIndex < maxIndex) 10 { 11 while(i < j) 12 { 13 while((temp <= arr[j]) && (i < j)) 14 { 15 j--; 16 } 17 arr[i] = arr[j]; 18 while((arr[i] <= temp) && (i < j)) 19 { 20 i++; 21 } 22 arr[j]= arr[i]; 23 } 24 arr[i] = temp; 25 quicksort(arr, minIndex, i - 1); 26 quicksort(arr, j + 1, maxIndex); 27 } 28 else 29 { 30 return; 31 } 32 } 33 34 int main(int argc, const char * argv[]) { 35 36 int arr[] = {9,2,43,1,56,3,778,3,4,67}; 37 int minIndex = 0; 38 int len = sizeof(arr) / sizeof(arr[0]); 39 int maxIndex = len - 1; 40 quicksort(arr, minIndex, maxIndex); 41 42 for(int i = 0; i <= maxIndex; i++){ 43 printf("%d ",arr[i]); 44 } 45 46 printf("\n"); 47 return 0; 48 }
原文:http://www.cnblogs.com/panda1024/p/6032072.html