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

    快速排序

    先从右往左找一个小于6的数,再从左往右找一个大于6的数,然后交换他们。这里可以用两个变量i和j,分别指向序列最左边和最右边。我们为这两个变量起个好听的名字“哨兵i”和“哨兵j”。刚开始的时候让哨兵i指向序列的最左边(即i=1),指向数字6。让哨兵j指向序列的最右边(即j=10),指向数字8。

    1.png

    首先哨兵j开始出动。因为此处设置的基准数是最左边的数,所以需要让哨兵j先出动,这一点非常重要(请自己想一想为什么)。哨兵j一步一步地向左挪动(即j--),直到找到一个小于6的数停下来。接下来哨兵i再一步一步向右挪动(即i++),直到找到一个数大于6的数停下来。最后哨兵j停在了数字5面前,哨兵i停在了数字7面前。

    2.png

    现在交换哨兵i和哨兵j所指向的元素的值。交换之后的序列如下。

      6  1  2  5  9 3  4  7  10  8
    

    到此,第一次交换结束。接下来开始哨兵j继续向左挪动(再友情提醒,每次必须是哨兵j先出发)。他发现了4(比基准数6要小,满足要求)之后停了下来。哨兵i也继续向右挪动的,他发现了9(比基准数6要大,满足要求)之后停了下来。此时再次进行交换,交换之后的序列如下。

      6  1  2 5  4  3  9  7 10  8
    
      第二次交换结束,“探测”继续。哨兵j继续向左挪动,他发现了3(比基准数6要小,满足要求)之后又停了下来。哨兵i继续向右移动,糟啦!此时哨兵i和哨兵j相遇了,哨兵i和哨兵j都走到3面前。说明此时“探测”结束。我们将基准数6和3进行交换。交换之后的序列如下。
    
      3  1 2  5  4  6  9 7  10  8
    

    3.png

    到此第一轮“探测”真正结束。此时以基准数6为分界点,6左边的数都小于等于6,6右边的数都大于等于6。回顾一下刚才的过程,其实哨兵j的使命就是要找小于基准数的数,而哨兵i的使命就是要找大于基准数的数,直到i和j碰头为止。

    
    class quickSort{
          public void quickSort(int[] str, int low, int high){
                if (low>high){
                      return;
                }
                int i, j, temp, t;
                i = low;
                j = high;
                temp = str[low]
                while(i<j){
                      while(temp>=str[i] && i<j){
                            i++;
                      }
                      while(temp<=str[j] && i<j){
                            j++;
                      }
                      if(i<j){
                            t= str[i];
                            str[i] = str[j];
                            str[j] = t;
                       }      
                 }
                  str[low] = str[i];
                  str[i] = temp;
                
                quickSort(str, low, i-1);
                quickSort(str, i+1, high);              
          }
    }
    
    
    * 大学的时候感觉老师讲的没咋听明白,这个图很清楚,主要保存自己用来学习,图侵删
  • 相关阅读:
    You are not late! You are not early!
    在同一个服务器(同一个IP)为不同域名绑定的免费SSL证书
    Vue.js Is Good, but Is It Better Than Angular or React?
    It was not possible to find any compatible framework version
    VS增加插件 Supercharger破解教程
    Git使用ssh key
    Disconnected: No supported authentication methods available (server sent: publickey)
    VS 2013打开.edmx文件时报类型转换异常
    asp.net MVC4 框架揭秘 读书笔记系列3
    asp.net MVC4 框架揭秘 读书笔记系列2
  • 原文地址:https://www.cnblogs.com/ghost-hee/p/14050794.html
Copyright © 2011-2022 走看看