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;
    }
  • 相关阅读:
    ajax中网页传输(三)XML——下拉列表显示练习
    ajax中网页传输(二)JSON——下拉列表显示练习
    ajax中网页传输(一)TEXT——带有删除功能的数据库表格显示练习
    ajax讲解:“创建用户”和“用户登录”练习
    JSON讲解和“弹窗”
    jQuery讲解
    Victor and String[Bestcoder #52 1004](回文树)
    回文串[APIO2014](回文树)
    回文子串计数[自创](回文树)
    随机序列[SHOI2016](找规律+线段树)
  • 原文地址:https://www.cnblogs.com/457220157-FTD/p/4057187.html
Copyright © 2011-2022 走看看