快速排序

        快速排序是对冒泡排序的一种改进。  

        基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

         假设要排序的数组是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 }

 

posted @ 2016-11-04 23:13  小课桌  阅读(201)  评论(0编辑  收藏  举报