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

来源:互联网 发布:为什么江老是被黑 知乎 编辑:程序博客网 时间:2024/05/22 04:27
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后面的数都大于等于x32      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  }

 

0 0
原创粉丝点击