zoukankan      html  css  js  c++  java
  • 一天一算法:快速排序

           i--->   6, 5, 7, 8, 3 , 2 , 9 , 10   <----j
    首先以第一个为基准值 6

    1:           j从右边出发,在j移动到2的时候发现小于6,j停了下来,

                     然后i开始移动,当i移动到7的时候发现大于6,于是i也停了下来

                     然后i和j交换了他们所代表的值

                     6, 5, 7, 8, 3 , 2 , 9 , 10 -->   6, 5, 2, 8, 3 , 7 , 9 , 10

     2:          然后j继续向左移动,在移动到3的时候发现小于6,j停了下来,

                    i也继续移动,当移动到8的时候发现大于6,于是i又停了下来

                    i和j交换了他们所代表的值

                    6, 5, 2, 8, 3 , 7 , 9 , 10   -->  6, 5, 2, 3, 8 , 7 , 9 , 10

    3:             继续,j继续向左移动,当移动到3的时候i == j,循环结束

                    这个时候呢,我们要把i代表的值和基准值进行交换

                    6, 5, 2, 3, 8 , 7 , 9 , 10   -->  3, 5, 2, 6, 8 , 7 , 9 , 10

    在这个的整个过程中呢,6我们已经找好了它的位置,我们就不在管它了,于是我们把6前后分成了2组,[3,5,2] 和[8, 7, 9, 10]

    我们再继续对[3, 5, 3]和[8, 7, 9, 10]重新上面的过程,最后我们就能得到最终结果:2,3,5,6,7,8,9,10

              

    #include<iostream>
    using namespace std;
    
    int a[] = {6, 5, 7, 8, 3, 2, 9, 10 };
    
    void QuickSort(int left, int right)
    {
        if (left >= right) //如果left >= right就没有必要交换了,因为本身已经排序了
            return;
        
        int guard = a[left];
        int i = left;
        int j = right;
    
        while (i != j) {
            while (a[j] >= guard && i < j) //保证每次要先从右边开始遍历
                j--;
            while (a[i] <= guard && i < j)
                i++;
            
            if (i < j) {
                int t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
    
        a[left] = a[i]; //结束后要把基准值和当前的那个值进行交换
        a[i] = guard;
    
        QuickSort(left, i - 1);
        QuickSort(i+1, right);
    }
    
    int main()
    {
        QuickSort(0, sizeof(a)/sizeof(int) -1);
        for (int i = 0; i < sizeof(a)/sizeof(int) ;i++ )
            cout << a[i] << " " ;
        cout << endl;
    }
  • 相关阅读:
    C语言文本文件实现局部修改
    TTMS框架设计思路及实例介绍
    浅谈函数与操作符的重载
    Java:继承与多态
    Java:类与对象(二)
    Java : 类与对象(一)
    C语言 数的阶乘、高次幂、大数加法及大数乘法
    C语言下的位运算
    enum:枚举类型介绍与简单使用
    C语言实现字符界面下的学生管理成绩系统
  • 原文地址:https://www.cnblogs.com/457220157-FTD/p/4057187.html
Copyright © 2011-2022 走看看