zoukankan      html  css  js  c++  java
  • 算法题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  }
  • 相关阅读:
    用Java画QRCode二维码
    Require.js 详细了解
    JAVA下几个问题
    Eclipse中使用Maven创建Web时错误
    Windows下MySQL安装配置与使用
    搭建 LimeSurvey投票调查问卷系统
    服务器常见页面访问返回错误信息
    linux系统使用python监测网络接口获取网络的输入输出
    Linux操作系统知识
    lvs工作原理
  • 原文地址:https://www.cnblogs.com/wangzaizhen/p/5177729.html
Copyright © 2011-2022 走看看