zoukankan      html  css  js  c++  java
  • 排序

    快速排序的原理都已经很清楚了,现在讲讲代码的细节问题和处理方法

     1 #include<iostream>
     2 using namespace std;
     3 void quicksort(int* a, int low, int high)
     4 {
     5     if (low < high)
     6     {
     7         int begin = low;
     8         int end = high;
     9         int key = a[begin];
    10         while (begin < end)
    11         {
    12             while (begin<end && a[end]>key)
    13                 end--;
    14             if (begin < end)
    15                 a[begin++] = a[end];
    16             while (begin < end && a[begin] < key)
    17                 begin++;
    18             if (begin < end)
    19                 a[end--] = a[begin];
    20         }
    21         a[begin] = key;
    22         quicksort(a, low, begin - 1);
    23         quicksort(a, begin + 1, high);
    24     }
    25 
    26 }
    27 int main()
    28 {
    29     int b[6] = {3,4,6,1,2,5};
    30     quicksort(b, 0, 5);
    31     for (int i = 0;i < 6;i++)
    32         cout << b[i] << endl;
    33     return 0;
    34 }

    (这个是最基础的版本,如果有问题请提醒)

    代码中,我设置low和high为数组的开头和结尾,注意数组的越界问题,数组里面10个数字,那么high应该是9!

    然后开头的这个if,这个给机器很清楚的指令,我们再看也会很明白原理,所以这个if还是很好的。

    下面的是2个while     if     ,这两个语句就是用来判断和交换的,第一个语句是指针(end)从后面往前走,第二个是(begin)从前往后走,找到了对应的元素就交换位置。

    这个中间一个细节问题,比如第15行,a[begin++]=a[end]  这个语句很关键,使指针自动指向下一个(如果是begin,就指向后一个,如果是end,就指向前一个),理解了以后看起来也很明白,如果没有类似功能的语句,程序应该会在某些条件下进入死循环。(比如,当begin=3,end=4,a[begin]=1,a[end]=1,这种条件下,所有条件都满足,但是他会无脑前一个赋值给后一个,后一个给前一个)。

    最后就是递归的参数,应该是第一个参数是数组,这个不用多讲,第二个参数是要处理的数组的开头部分,第三个参数是要处理的数组的结尾部分

    (比如,第一次递归调用时,low=0,begin-1=2,因为一共6个数字,并且a[2]也就是第三个数字是基准数字,基准数字不用参与再一轮的排序,所以这个例子当中应该是排序第0,1个元素)

    最后给自己加油!

  • 相关阅读:
    (18)随机数
    JMeter 正则表达式提取器(二)
    swiper控件(回调函数)
    移动测试之appium+python 导出报告(六)
    移动测试之appium+python 简单例子(五)
    移动测试之appium+python 入门代码(四)
    移动测试之appium+python 入门代码(三)
    移动测试之appium+python 入门代码(二)
    移动测试之appium+python 环境安装(一)
    网站架构模式(二)
  • 原文地址:https://www.cnblogs.com/KeithTee/p/11707887.html
Copyright © 2011-2022 走看看