• c++练习-快速排序


    这个例子将长度为r的数列a从按照从小到大作排列

    快速排序的思想简单说来就是

    在a中依次先选定一个数key,将这个数依次与a中的其他数做对比,如果比key小则放到key前面,如果比key大就放到key后面。这样对数组a就会分成两个部分。假设位置替换后key最终位置时k。

    那么数组的两个部分就分别是 a[0,k-1],a[k+1,r].这时候a[k]已经排好序了

    分别对这两个部分进行上面的操作。又会分别分出四个部分。对它们进行同样操作。直到都无法再排序为止跳出循环。

    伪代码如下:

    void Qsort(array a, int low, int high)

      if low >= high return;

      int first = low;

      int last = high;

      a[first] -> key;

      while(first<last)

        while(first<last && a[last] > key) last--;

        a[first] = a[last];

        while(first<last && a[first] < key) first++;

        a[last] = a[first];

      a[first] = key;

      int k = first;

      Qsort(array a, 0, k-1);

      Qsort(array a, k+1, high);

    具体代码如下:

     1 #include <iostream>
     2 #include <stdlib.h>
     3 
     4 using namespace std;
     5 
     6 void Qsort(int a[],int low,int high)
     7 {
     8   if(low>=high) return;
     9   int first=low;
    10   int last=high; //这里的high是这个数组的长度
    11   int key=a[first]; 
    12   while(first<last)
    13   {
    14     while(first<last&&a[last]>=key) last--; //如果比key大,无需移动,所以last只减少,不赋值
    15     a[first]=a[last]; //直到碰到比key小的数,将这个数放到first所在的位置。
    16     while(first<last&&a[first]<=key) first++;//如果比key小,无需移动,只要将first增加
    17     a[last]=a[first];//直到碰到比key大的数,将这个数放到last的位置。
    18   }
    19   a[first]=key; //first和last碰头之后,也就是first>=last,说明整个数组遍历了一遍。因此跳出循环,将key值赋予a[first]或者a[last]
    20   Qsort(a,low,first-1);//first和last是一样的,选哪个都可以
    21   Qsort(a,first+1,high);
    22 }
    23 int main()
    24 {
    25   int k = rand() % 10;
    26   int i = 0;
    27   int a[10];
    28   while(i < 10) a[i++] = rand() % 10; //生成大小10的随机数组
    29 
    30   Qsort(a,0,sizeof(a)/sizeof(a[0])-1);//计算数组大小,注意数组是从0开始计算的,因此会-1。
    31 
    32   for(int i=0;i<sizeof(a)/sizeof(a[0]);i++)
    33   {
    34   cout<<a[i]<<" ";
    35   }
    36   cout << endl;
    37   return(0);
    38 }
  • 相关阅读:
    【转】CTF-Born2root's-WriteUP
    Win10 64位+VS2015+Opencv3.3.0安装配置
    C++ bitset 用法
    未来的一个要参加蓝桥杯,在这里记录下笔记
    一些漏洞测试利用脚本
    Linux下抓取登陆用户密码神器mimipenguin
    免费在线验证码接收平台
    kali linux 安装 Mysql Can't read from messagefile 报错解决方案
    FPGA实现UHS的一些资料
    CYPRESS USB芯片win10驱动
  • 原文地址:https://www.cnblogs.com/guochunyi/p/4313589.html
Copyright © 2020-2023  润新知