算法题13 排序算法(更新快排)

1 快速排序

http://blog.csdn.net/morewindows/article/details/6684558 这篇博客介绍的非常清晰易懂了。主要就是挖坑,填坑+分治法策略。笔者这里就只贴出代码来

 1  void QuickSortCore(int arr[],int start,int end)
 2  {
 3      int i=start,j=end;
 4      //以起点为基准值,先挖一个坑,需要用一个比x小的值来填i坑
 5      int x=arr[i];
 6      while (i<j)
 7      {
 8          //从后向前寻找比x小的值
 9          while (i<j&&arr[j]>=x)
10          {
11              j--;
12          }
13          //填i的坑,等于挖了j的元素到i,需要一个比x大的数来填j的坑
14          if (i<j)
15          {
16              arr[i++]=arr[j];
17          }
18 
19          //从前向后寻找比x大的值
20          while (j>i&&arr[i]<x)
21          {
22              i++;
23          }
24          //填j的坑,等于挖了i的元素到j,需要一个比x大的数来填i的坑
25          if (i<j)
26          {
27              arr[j--]=arr[i];
28          }
29 
30      }
31      //基准值调整到中间,一趟快排以后使得x前面的数都小于x,x后面的数都大于等于x
32      arr[i]=x;
33 
34      if (start<(i-1))
35      {
36          QuickSortCore(arr,start,i-1);
37      }
38      if (end>(i+1))
39      {
40          QuickSortCore(arr,i+1,end);
41      }
42 
43  }
44 
45  void QuickSort(int arr[],int len)
46  {
47      if (arr==NULL||len<=0)
48          throw std::exception("Invalid input.");
49 
50      int reserve_num=0;
51      QuickSortCore(arr,0,len-1);
52      
53      for (int i=0;i<len;i++)
54      {
55          cout<<arr[i]<<' ';
56      }
57      cout<<endl;
58  }

 

posted @ 2016-02-02 15:46  summerxx  阅读(236)  评论(0编辑  收藏  举报