首页 > 编程语言 > 详细

快速排序

时间:2016-11-05 02:13:22      阅读:338      评论:0      收藏:0      [点我收藏+]

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

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

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!