zoukankan      html  css  js  c++  java
  • 快速排序 C&&C++

    快排算法
    快排和冒泡都是基于交换的思想,但是进行了改进,更为高效。
     
    流程:
    (1)首先设定一个分界值,通过分界值将数组分成左右两部分。
    (2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。
    (3)左右两个部分重复上述排序。
     
    从上述流程可以看出,这就是一个递归的过程,递归终止即只有一个元素
     
     1 #include<iostream>
     2 #include<ctime>
     3 #include<cstdlib>
     4 using namespace std;
     5 void QuickSort(int *a,int left,int right)
     6 {
     7     int rt,lt,t,base;
     8     rt=right;                           //rt为基准分组后的左半部分上边界
     9     lt=left;                            //lt为基准分组后的右半部分的下边界
    10     base=a[left];
    11 /*这里定义分界值,这个分界值定在哪里都是可以的,定在中间更为直观,若定在其他地方,手动排一下就知道,边界值会换到中间去,和定在中间一个样*/
    12     while (lt < rt)
    13     {
    14         while(a[lt] < base) lt++;       //从左边开始寻找大于分界值的值
    15         while(a[rt] > base) rt--;       //从右边开始寻找小于边界值的值
    16         if(lt < rt)
    17         { /*lt小于rt,就交换这两个的值,lt与rt必不会在边界值同一侧,
    18         手动按照算法排一下就知道,lt或rt到了边界值的时候就会停下来,交换的时候就会把边界值换到中间去了*/
    19             t = a[lt] ;
    20             a[lt] = a[rt] ;
    21             a[rt] = t ;
    22             lt++;
    23             rt--;
    24         }
    25     }
    26     while(a[lt]<base) lt++; //因为右半部分可能还到不了下边界,所以需要继续递增
    27     while(a[rt]>base) rt--;//因为左半部分可能还到不了上界,所以需要继续递减
    28     if(lt == rt) lt++;     //此处为了避免两个边界模糊不清
    29     if( left < rt ) QuickSort(a,left,rt); //递归对左半部分快排
    30     if( right > lt) QuickSort(a,lt,right); //递归对右半部分快排
    31     
    32 }
    33 int main()
    34 {
    35     srand(time(NULL));
    36     int n;
    37     cout<<"Please cin the size of array:"<<endl;//输入数组的大小
    38     cin>>n;
    39     int a[n];
    40     cout<<"Array before sorting is:"<<endl;
    41     for (int i = 0; i < n; i++)
    42     {
    43         a[i]=rand()/1000;              //随机数作为数组输入
    44         cout<<a[i]<<" ";
    45     }
    46     cout<<endl;
    47     QuickSort(a,0,n-1);
    48     cout<<"Array after sorting is:"<<endl;
    49     for (int i = 0; i < n; i++) cout<<a[i]<<" ";
    50     cout<<endl;
    51     return 0;
    52 }
     
  • 相关阅读:
    性能相关记录
    邮箱SMTP
    IntelliJ IDEA 14.1.7 安装激活
    pychram永久激活
    电脑的奇葩坑
    jmeter过程中的坑
    各数据库驱动连接配置
    spring定时器--时间设置规则
    linux redhat7.2下vim的安装与使用方法
    分数化小数
  • 原文地址:https://www.cnblogs.com/Arthas8086/p/11949001.html
Copyright © 2011-2022 走看看