<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java圖解快速排序算法(附源碼)

          共 2085字,需瀏覽 5分鐘

           ·

          2021-08-14 16:34


          點(diǎn)擊上面藍(lán)字onlyserver,關(guān)注萬(wàn)人公眾號(hào)

          號(hào)內(nèi)福利:

          1.架構(gòu)師成神之路-最新視頻資源-65個(gè)課題【免費(fèi)下載】

          2.400多人的微信技術(shù)群,干凈,沒(méi)廣告,氣氛活躍

          3.技術(shù)文章都是精華文章,助你進(jìn)步,成長(zhǎng),強(qiáng)大

          =長(zhǎng)摁關(guān)注=

          =回復(fù)加群進(jìn)微信技術(shù)群=

          =回復(fù)1024下載視頻資源=


          先說(shuō)一下原理:兩個(gè)指針,分別從數(shù)組的首尾開(kāi)始向中間運(yùn)動(dòng),左指針先運(yùn)動(dòng),左指針指到的數(shù)若大于或等于樞紐元?jiǎng)t停下來(lái),當(dāng)左指針停下來(lái)的時(shí)候,右指針運(yùn)動(dòng),右指針指到的數(shù)若小于樞紐元?jiǎng)t停下來(lái),此時(shí),交換左右指針指向的數(shù),然后重復(fù)上述運(yùn)動(dòng)。直到左右指針相遇,運(yùn)動(dòng)結(jié)束。

          比如數(shù)組:【7 10 2 4 7 1 8 5 19】, 把7當(dāng)做基準(zhǔn)值:


          ? ? ? ? ?24ffc7a607188674d26a9196342c0d34.webp


          ? ? ? ? ?左指針指到的數(shù)等于7,停下來(lái);右指針指向的數(shù)大于7,繼續(xù)走。。。


          ? ? ? ? ? ? ??82de430131f1d1febea2d314e896c6ab.webp


          ? ? ? ? 右指針指向的數(shù)為5,小于7,停下來(lái);然后交換兩個(gè)指針指向的數(shù)。。。


          ? ? ? ? ? ? ?9e86e88fd67970c40896eda9738ecd88.webp


          ? ? ? ?然后左指針繼續(xù)走,走到10,大于7,停下來(lái);然后右指針走,指向8,大于7,繼續(xù)走,然后走到1,小于7,停下來(lái)。。。


          ? ? ? ? ? ? ??68048b155ea0570128dc2d2600661091.webp


          ? ? ? ?然后交換左右兩個(gè)指針的指向的值。。。


          ? ? ? ?bc2efcc25be86ee87d2df4e517583a1a.webp


          ? ? ? 然后左指針繼續(xù)走,走到2,小于7,繼續(xù)走,走到4,繼續(xù)走,走到7,等于7,停;然后右指針走,走到7,和左指針相遇。。。


          ? ? ? ??749a7e0f2e201ca7c00d8aaa435c5d75.webp


          ? ? ? ?然后以7位界限,左邊的都是小于7的數(shù),右邊的都是大于7的數(shù)。然后將左邊的【5,1,2,4】和右邊的【10,8,7,19】看成是兩個(gè)數(shù)組,重復(fù)上述的步驟,就可以排成【1,2,4,5,7,7,8,10,19】這樣的從小到大的有序數(shù)組。


          上源碼:


          package 快速排序;
          /**
          * 7 10 2 4 7 1 8 5 19
          * 1.先找一個(gè)數(shù),作為基準(zhǔn),比如7
          * 2.左邊一個(gè)指針,從左向右找,找到大于等于7的就停下來(lái), 找不到就繼續(xù)走
          * 3.右邊一個(gè)指針,從右向左找,找到小于7的就停下來(lái),找不到就繼續(xù)走
          * 4.左右都停下來(lái)以后,交換指針下邊的值
          * 5.一直到左邊的指針碰到右邊的指針,算是完成第一遍。
          * 6.這樣的目的是為了以7為界,把小于7的數(shù)都放到左邊,把大于7的數(shù)都放到右邊
          * 7.遞歸上面的操作,把左右分開(kāi)的兩部分,再按上面的步驟來(lái)一遍。
          * des: 3個(gè)while ,while里面套著2個(gè)小while, 有遞歸,左右兩部分要遞歸
          * 時(shí)間復(fù)雜度:
          * 1.最壞的情況(基準(zhǔn)值左邊或者右邊的序列為空),復(fù)雜度是:On2
          * 2.最好的情況(基準(zhǔn)值每次都恰好左右數(shù)量相等),復(fù)雜度是:Onlogn
          * 3.平均的情況
          * created by miapoeng on 2021/8/10 14:32
          */
          public class QuickSort {

          private static void quickSort (int[] arr, int low, int high) {
          int i;//左邊指針
          int j;//右邊指針
          int temp;//基準(zhǔn)值
          int t;//用于交換的第三者
          //左邊指針大于右邊指針的時(shí)候,不再執(zhí)行? >=能行嗎?
          if (low > high) {
          return;
          }

          i = low;//給左邊指針賦值(下標(biāo))
          j = high;//給右邊指針賦值(下標(biāo))
          temp = arr[low];//基準(zhǔn)值默認(rèn)取第一個(gè)數(shù)
          //他倆沒(méi)相遇,就一直執(zhí)行
          while (i < j) {

          //左邊指針指的這個(gè)數(shù)大于等于7就停下, 下于7就繼續(xù)走
          while (arr[i] < temp && i < j) {//&& i < 是必須要加的,否則會(huì)報(bào)錯(cuò)
          i++;
          }

          //右邊指針指的這個(gè)數(shù)小于7就停下, 大于等于7就繼續(xù)走
          while (arr[j] >= temp && i < j) {
          j--;
          }

          //都停下以后,進(jìn)行交換
          // if (i < j) {
          t = arr[j];
          arr[j] = arr[i];
          arr[i] = t;
          // }
          }

          quickSort(arr, low, j-1);
          quickSort(arr, j+1, high);
          }


          public static void main(String[] args) {
          int[] arr = {7, 10, 2, 4, 7, 1, 8, 5, 19, 190};
          quickSort(arr, 0, arr.length - 1);
          for (int i = 0; i < arr.length; i++) {
          System.out.print(arr[i] + " ");
          }
          //1 2 4 5 7 7 8 10 19 190
          }
          }


          瀏覽 76
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  菠萝蜜二区三区免费视频免费 | 欧美日韩高清性爱在线观看 | 女人18毛片90分钟 | 激情在线无码色综合播放视频 | 免费在线黄片视频 |