女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

排序算法之選擇排序

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-09-25 16:30 ? 次閱讀

選擇排序: (Selection sort)是一種簡單直觀的排序算法,也是一種不穩(wěn)定的排序方法。

選擇排序的原理:

一組無序待排數(shù)組,做升序排序,我們先假定第一個位置上的數(shù)據(jù)就是最小的,我們用一個參數(shù)記錄這個最小的數(shù),然后依次把后面的每個位置的數(shù)據(jù)和這個最小的比較,如果比這個數(shù)小就替換兩個位置數(shù)據(jù),等到第一輪比較完成就能確定最小的數(shù)據(jù)排在第一位了,然后第二輪從第二個位置開始,相同的方式比較,每次都能找到本輪最小的值,直至全部待排元素個數(shù)為0的時候,數(shù)組就排好順序了。

選擇排序流程圖

圖片

我們來進行詳細解析看看

首先我們給個無序數(shù)組[4,6,15,9,12,3,32]進行升序排序,因為需要確定每個數(shù)組的長度,所以需要比較數(shù)組長度-1輪,當前面的元素都排好了之后,那么數(shù)組最后一個元素自然就確定了位置。

我們定義兩個值,minIndex,minNum用來分別表示每一輪的找到的最小值的下標和值,后面未排序的值都和minNum比較,從而找出每一輪的最小值。

  • 第一輪我們以下標為1的第一位作為標志位(也就是把第一個值當做最小值),那么此時minIndex=0,minNum=4,經(jīng)過和 minNum 比較發(fā)現(xiàn)后面只有3比4小,那么3和4交換位置,minIndex=5,minNum=3,把4換到下標為5的位置,如下圖所示:

圖片第一輪我們得到的結(jié)果是[3,6,15,9,12,4,32],本輪最小數(shù)是:3,所以3放到本輪標志位,也就是第一位

  • 第二輪:拿到第一輪排序的值作為初始值[3,6,15,9,12,4,32],同第一輪一樣,此時6作為標志位minNum=6,minNum和其他比較,只有4比6小,需要交換位置,如下圖所示圖片第二輪排序結(jié)果[3,4,15,9,12,6,32],本輪最小數(shù)是:4
  • 第三輪:初始值[3,4,15,9,12,6,32],這次標志位15,minNum=15,minIndex=2,minNum先比和9比較,發(fā)現(xiàn)9比15小,minNum=9,minIndex=3,然后minNum和12比較,不需要替換minNum,再和6比較,minNum=6,minIndex=5,后面再比較已經(jīng)沒有比6小了,那么本輪就是初始標志位15和下標為5,值為6的數(shù)據(jù)換位置。圖片
    第三輪排序結(jié)果[3,4,6,9,12,15,32],本輪最小數(shù)是:6
  • 第四、五、六輪:初始值[3,4,6,9,12,15,32],經(jīng)過前面的比較我們可以看到數(shù)組已經(jīng)排序完成,但是程序并不知道,會繼續(xù)比較下去,把下標為4、5、6位置都作為標志位比較一次,發(fā)現(xiàn)都不需要變動位置,那么最終執(zhí)行完成之后就能排序完成圖片第四、五、六輪排序結(jié)果[3,4,6,9,12,15,32]

到這,我們已經(jīng)清楚了每個步驟做了什么,那么接下來上代碼驗證一下:

Java代碼實現(xiàn)

public class selectionSort {
     public static void main(String[] args){
          int[] arr = new int[]{4,6,15,9,12,3,32};
         for(int i=0;i< arr.length-1;i++){//每次循環(huán)都會找出最小的數(shù)
             //記錄最小數(shù)的下標
             int minIndex = i;
             //記錄最小數(shù)
             int minNum = arr[i];
             //每次循環(huán)都會找出最小的數(shù)
             for(int j=i+1;j< arr.length;j++){
                 if(arr[j]< minNum){//如果當前數(shù)比最小數(shù)小,則更新最小數(shù)
                     minNum = arr[j];//更新最小數(shù)
                     minIndex = j;//更新最小數(shù)的下標
                 }
             }
             //將最開始假定的小的數(shù)移動到真實最小的位置
             arr[minIndex]=arr[i];
             arr[i]=minNum;//將標志位放到最小數(shù)原來所在的位置
             
             //打印結(jié)果,方便查看
             System.out.print("第"+(i+1)+"輪[");
             for(int a=0;a< arr.length;a++){
                 System.out.print(arr[a]+"t");
             }
             System.out.println ("],本輪最小數(shù)是:"+minNum);
         }
         System.out.print("最終結(jié)果[");
         for(int i=0;i< arr.length;i++){
             System.out.print(arr[i]+"t");
         }
         System.out.println("]");
     }
 }

輸出結(jié)果

1[3 6 15 9 12 4 32 ],本輪最小數(shù)是:32[3 4 15 9 12 6 32 ],本輪最小數(shù)是:43[3 4 6 9 12 15 32 ],本輪最小數(shù)是:64[3 4 6 9 12 15 32 ],本輪最小數(shù)是:95[3 4 6 9 12 15 32 ],本輪最小數(shù)是:126[3 4 6 9 12 15 32 ],本輪最小數(shù)是:15
  最終結(jié)果[3 4 6 9 12 15 32 ]

時間復雜度

我們通過上面的細節(jié)拆分發(fā)現(xiàn),無論是否是已經(jīng)排好的還是沒排好的情況,我們都需要每個數(shù)字都比較到,那么就出現(xiàn)N個元素的數(shù)組,第一輪是n次比較,第二輪是從第二個位置開始,那么就是n-1,第三輪就是n-2次... 最后是1,那么就出現(xiàn)了n+(n-1)+(n-2)+(n-3)...1,這是一個等差數(shù)列,求和為一個二次型多項式,因為等差數(shù)列求和會出現(xiàn)二次型;我們?nèi)∽罡唠A就是n^2,所以時間復雜度就是O(n^2),而且最好和最壞的情況時間復雜度都是O(n^2)

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7239

    瀏覽量

    90990
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2984

    瀏覽量

    106853
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4886

    瀏覽量

    70247
  • 排序算法
    +關(guān)注

    關(guān)注

    0

    文章

    53

    瀏覽量

    10207
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    419

    瀏覽量

    26368
收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    FPGA排序-冒泡排序介紹

    排序算法是圖像處理中經(jīng)常使用一種算法,常見的排序算法有插入排序、希爾
    發(fā)表于 07-17 10:12 ?1291次閱讀
    FPGA<b class='flag-5'>排序</b>-冒泡<b class='flag-5'>排序</b>介紹

    十大排序算法總結(jié)

    排序算法是最經(jīng)典的算法知識。因為其實現(xiàn)代碼短,應該廣,在面試中經(jīng)常會問到排序算法及其相關(guān)的問題。一般在面試中最常考的是快速
    的頭像 發(fā)表于 12-20 10:39 ?1453次閱讀

    嵌入式stm32實用的排序算法 - 交換排序

    合很多,我這里就不再一一舉例說明,掌握排序的基本算法,到時候遇到就有用武之地。Ⅱ、排序算法分類1.按存儲分類:內(nèi)部排序和外部
    發(fā)表于 04-12 13:14

    C語言冒泡、插入法、選擇排序算法分析

    C語言冒泡、插入法、選擇排序算法分析
    發(fā)表于 09-06 15:51 ?44次下載

    C語言教程之幾種排序算法

    數(shù)據(jù)結(jié)構(gòu)的排序算法有很多種。 其中, 快速排序 、希爾排序、堆排序、直接選擇
    發(fā)表于 11-16 10:23 ?1841次閱讀

    c語言排序算法選擇排序

    應廣大"鳥友"強烈要求,小編將會推出《排序系列》,給大家講講排序那些事。? ? ? ? ?那么今天首先給大家講解最符合人類思維邏輯的超簡單排序法?《選擇
    發(fā)表于 11-16 10:25 ?3523次閱讀
    c語言<b class='flag-5'>排序</b><b class='flag-5'>算法</b><b class='flag-5'>之</b><b class='flag-5'>選擇</b><b class='flag-5'>排序</b>法

    常用的排序算法總覽

    我們通常所說的排序算法往往指的是內(nèi)部排序算法,即數(shù)據(jù)記錄在內(nèi)存中進行排序
    的頭像 發(fā)表于 06-13 18:18 ?3012次閱讀
    常用的<b class='flag-5'>排序</b><b class='flag-5'>算法</b>總覽

    常用的非比較排序算法:計數(shù)排序,基數(shù)排序,桶排序的詳細資料概述

    這篇文章中我們來探討一下常用的非比較排序算法:計數(shù)排序,基數(shù)排序,桶排序。在一定條件下,它們的時間復雜度可以達到O(n)。
    的頭像 發(fā)表于 06-18 15:11 ?7393次閱讀
    常用的非比較<b class='flag-5'>排序</b><b class='flag-5'>算法</b>:計數(shù)<b class='flag-5'>排序</b>,基數(shù)<b class='flag-5'>排序</b>,桶<b class='flag-5'>排序</b>的詳細資料概述

    常用排序算法分析

    一種是比較排序,時間復雜度O(nlogn) ~ O(n^2),主要有:冒泡排序選擇排序,插入排序,歸并
    的頭像 發(fā)表于 07-13 16:13 ?2332次閱讀

    C語言中的排序算法了解

    選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到
    的頭像 發(fā)表于 11-12 14:52 ?2854次閱讀

    實用的排序算法 - 交換排序

    實用的排序算法 - 交換排序
    的頭像 發(fā)表于 03-20 09:53 ?1942次閱讀
    實用的<b class='flag-5'>排序</b><b class='flag-5'>算法</b> -  交換<b class='flag-5'>排序</b>

    詳談選擇排序算法的定義和過程

    選擇排序(Selection sort)是一種簡單直觀的排序算法。它的工作原理是:第一次從待排序的數(shù)據(jù)元素中選出最小(或最大)的一個元素,存
    的頭像 發(fā)表于 06-30 17:06 ?3773次閱讀
    詳談<b class='flag-5'>選擇</b><b class='flag-5'>排序</b><b class='flag-5'>算法</b>的定義和過程

    排序算法分享:歸并排序說明

    我們今天繼續(xù)給大家分享排序算法里面的另外一種排序算法:歸并排序
    的頭像 發(fā)表于 12-24 14:34 ?915次閱讀

    淺談希爾排序算法思想以及如何實現(xiàn)

    算法進行排序,隨著增量減少,每組包含的關(guān)鍵字越來越多,增量減到1時,整個序列被分為一組,算法終止。 我們以增序排序為例,希爾排序基本步驟:
    的頭像 發(fā)表于 06-30 10:05 ?2190次閱讀

    常見排序算法分類

    本文將通過動態(tài)演示+代碼的形式系統(tǒng)地總結(jié)十大經(jīng)典排序算法排序算法 算法分類 —— 十種常見排序
    的頭像 發(fā)表于 06-22 14:49 ?1276次閱讀
    常見<b class='flag-5'>排序</b><b class='flag-5'>算法</b>分類