<sup id="m40ya"></sup>
  • 
    
  • <kbd id="m40ya"></kbd>
    <samp id="m40ya"></samp>
    <ul id="m40ya"></ul>
  • 更多精彩內(nèi)容,歡迎關(guān)注:

    視頻號
    視頻號

    抖音
    抖音

    快手
    快手

    微博
    微博

    當(dāng)前位置:首頁 科技百科 選擇排序代碼

    選擇排序代碼

    文檔

    選擇排序代碼

    選擇排序是一種簡單直觀的排序算法,無論什么數(shù)據(jù)進(jìn)去都是 O(n?) 的時間復(fù)雜度。所以用到它的時候,數(shù)據(jù)規(guī)模越小越好。唯一的好處可能就是不占用額外的內(nèi)存空間。
    推薦度:
    導(dǎo)讀選擇排序是一種簡單直觀的排序算法,無論什么數(shù)據(jù)進(jìn)去都是 O(n?) 的時間復(fù)雜度。所以用到它的時候,數(shù)據(jù)規(guī)模越小越好。唯一的好處可能就是不占用額外的內(nèi)存空間。
    .example-btn{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.example-btn:hover{color:#fff;background-color:#47a447;border-color:#398439}.example-btn:active{background-image:none}div.example{width:98%;color:#000;background-color:#f6f4f0;background-color:#d0e69c;background-color:#dcecb5;background-color:#e5eecc;margin:0 0 5px 0;padding:5px;border:1px solid #d4d4d4;background-image:-webkit-linear-gradient(#fff,#e5eecc 100px);background-image:linear-gradient(#fff,#e5eecc 100px)}div.example_code{line-height:1.4em;width:98%;background-color:#fff;padding:5px;border:1px solid #d4d4d4;font-size:110%;font-family:Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;word-break:break-all;word-wrap:break-word}div.example_result{background-color:#fff;padding:4px;border:1px solid #d4d4d4;width:98%}div.code{width:98%;border:1px solid #d4d4d4;background-color:#f6f4f0;color:#444;padding:5px;margin:0}div.code div{font-size:110%}div.code div,div.code p,div.example_code p{font-family:"courier new"}pre{margin:15px auto;font:12px/20px Menlo,Monaco,Consolas,"Andale Mono","lucida console","Courier New",monospace;white-space:pre-wrap;word-break:break-all;word-wrap:break-word;border:1px solid #ddd;border-left-width:4px;padding:10px 15px}

    排序算法是《數(shù)據(jù)結(jié)構(gòu)與算法》中最基本的算法之一。排序算法可以分為內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內(nèi)部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等。以下是選擇排序算法:

    選擇排序是一種簡單直觀的排序算法,無論什么數(shù)據(jù)進(jìn)去都是 O(n?) 的時間復(fù)雜度。所以用到它的時候,數(shù)據(jù)規(guī)模越小越好。唯一的好處可能就是不占用額外的內(nèi)存空間了吧。

    1. 算法步驟

    首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。

    再從剩余未排序元素中繼續(xù)尋找最小(大)元素,然后放到已排序序列的末尾。

    重復(fù)第二步,直到所有元素均排序完畢。

    2. 動圖演示

    代碼實現(xiàn)JavaScript 代碼實現(xiàn)實例 function selectionSort(arr) {? ? var len = arr.length;? ? var minIndex, temp;? ? for (var i = 0; i < len - 1; i++) {? ? ? ? minIndex = i;? ? ? ? for (var j = i + 1; j < len; j++) {? ? ? ? ? ? if (arr[j] < arr[minIndex]) { ? ? // 尋找最小的數(shù)? ? ? ? ? ? ? ? minIndex = j; ? ? ? ? ? ? ? ? // 將最小數(shù)的索引保存? ? ? ? ? ? }? ? ? ? }? ? ? ? temp = arr[i];? ? ? ? arr[i] = arr[minIndex];? ? ? ? arr[minIndex] = temp;? ? }? ? return arr;}Python 代碼實現(xiàn)實例 def selectionSort(arr):? ? for i in range(len(arr) - 1):? ? ? ? # 記錄最小數(shù)的索引? ? ? ? minIndex = i? ? ? ? for j in range(i + 1, len(arr)):? ? ? ? ? ? if arr[j] < arr[minIndex]:? ? ? ? ? ? ? ? minIndex = j? ? ? ? # i 不是最小數(shù)時,將 i 和最小數(shù)進(jìn)行交換? ? ? ? if i != minIndex:? ? ? ? ? ? arr[i], arr[minIndex] = arr[minIndex], arr[i]? ? return arrGo 代碼實現(xiàn)實例 func selectionSort(arr []int) []int {? ? ? ? length := len(arr)? ? ? ? for i := 0; i < length-1; i++ {? ? ? ? ? ? ? ? min := i? ? ? ? ? ? ? ? for j := i + 1; j < length; j++ {? ? ? ? ? ? ? ? ? ? ? ? if arr[min] > arr[j] {? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? min = j? ? ? ? ? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? }? ? ? ? ? ? ? ? arr[i], arr[min] = arr[min], arr[i]? ? ? ? }? ? ? ? return arr}Java 代碼實現(xiàn)實例 public class SelectionSort implements IArraySort {? ? @Override? ? public int[] sort(int[] sourceArray) throws Exception {? ? ? ? int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);? ? ? ? // 總共要經(jīng)過 N-1 輪比較? ? ? ? for (int i = 0; i < arr.length - 1; i++) {? ? ? ? ? ? int min = i;? ? ? ? ? ? // 每輪需要比較的次數(shù) N-i? ? ? ? ? ? for (int j = i + 1; j < arr.length; j++) {? ? ? ? ? ? ? ? if (arr[j] < arr[min]) {? ? ? ? ? ? ? ? ? ? // 記錄目前能找到的最小值元素的下標(biāo)? ? ? ? ? ? ? ? ? ? min = j;? ? ? ? ? ? ? ? }? ? ? ? ? ? }? ? ? ? ? ? // 將找到的最小值和i位置所在的值進(jìn)行交換? ? ? ? ? ? if (i != min) {? ? ? ? ? ? ? ? int tmp = arr[i];? ? ? ? ? ? ? ? arr[i] = arr[min];? ? ? ? ? ? ? ? arr[min] = tmp;? ? ? ? ? ? }? ? ? ? }? ? ? ? return arr;? ? }}PHP 代碼實現(xiàn)實例 function selectionSort($arr){? ? $len = count($arr);? ? for ($i = 0; $i < $len - 1; $i++) {? ? ? ? $minIndex = $i;? ? ? ? for ($j = $i + 1; $j < $len; $j++) {? ? ? ? ? ? if ($arr[$j] < $arr[$minIndex]) {? ? ? ? ? ? ? ? $minIndex = $j;? ? ? ? ? ? }? ? ? ? }? ? ? ? $temp = $arr[$i];? ? ? ? $arr[$i] = $arr[$minIndex];? ? ? ? $arr[$minIndex] = $temp;? ? }? ? return $arr;}C 語言實例 void swap(int *a,int *b) //交換兩個變數(shù){? ? int temp = *a;? ? *a = *b;? ? *b = temp;}void selection_sort(int arr[], int len) {? ? int i,j;? ? ? ? for (i = 0 ; i < len - 1 ; i++) ? ? {? ? ? ? ? ? ? ? int min = i;? ? ? ? ? ? ? ? for (j = i + 1; j < len; j++) ? ? //走訪未排序的元素? ? ? ? ? ? ? ? ? ? ? ? if (arr[j] < arr[min]) ? ?//找到目前最小值? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? min = j; ? ?//紀(jì)錄最小值? ? ? ? ? ? ? ? swap(&arr[min], &arr[i]); ? ?//做交換? ? ? ? }}C++實例 template //整數(shù)或浮點(diǎn)數(shù)皆可使用,若要使用物件(class)時必須設(shè)定大於(>)的運(yùn)算子功能void selection_sort(std::vector& arr) {? ? ? ? for (int i = 0; i < arr.size() - 1; i++) {? ? ? ? ? ? ? ? int min = i;? ? ? ? ? ? ? ? for (int j = i + 1; j < arr.size(); j++)? ? ? ? ? ? ? ? ? ? ? ? if (arr[j] < arr[min])? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? min = j;? ? ? ? ? ? ? ? std::swap(arr[i], arr[min]);? ? ? ? }}C#實例 static void selection_sort(T[] arr) where T : System.IComparable{//整數(shù)或浮點(diǎn)數(shù)皆可使用? ? ? ? int i, j, min, len = arr.Length;? ? ? ? T temp;? ? ? ? for (i = 0; i < len - 1; i++) {? ? ? ? ? ? ? ? min = i;? ? ? ? ? ? ? ? for (j = i + 1; j < len; j++)? ? ? ? ? ? ? ? ? ? ? ? if (arr[min].CompareTo(arr[j]) > 0)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? min = j;? ? ? ? ? ? ? ? temp = arr[min];? ? ? ? ? ? ? ? arr[min] = arr[i];? ? ? ? ? ? ? ? arr[i] = temp;? ? ? ? }}Swift實例 import Foundation/// 選擇排序////// - Parameter list: 需要排序的數(shù)組func selectionSort(_ list: inout [Int]) -> Void {? ? for j in 0.. list[i] {? ? ? ? ? ? ? ? minIndex = i? ? ? ? ? ? }? ? ? ? }? ? ? ? list.swapAt(j, minIndex)? ? }}

    原文地址:https://github.com/hustcc/JS-Sorting-Algorithm/blob/master/2.selectionSort.md

    參考地址:https://zh.wikipedia.org/wiki/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F

    以下是熱心網(wǎng)友對選擇排序算法的補(bǔ)充,僅供參考:

    熱心網(wǎng)友提供的補(bǔ)充1:

    Kotlin 實現(xiàn)

    class SelectionSort { 
        /** 
        * 拓展IntArray為他提供數(shù)據(jù)兩個數(shù)交換位置的方法 
        * @param i 第一個數(shù)的下標(biāo) 
        * @param j 第二個數(shù)的下標(biāo) 
        */ 
        fun IntArray.swap(i:Int,j:Int){ 
            var temp=this[i] 
            this[i]=this[j] 
            this[j]=temp 
        } 
        fun selectionSort(array: IntArray):IntArray{
            for (i in array.indices){ 
                //假設(shè)最小值是i 
                var min=i 
                var j=i+1 
                while (j in array.indices){ 
                    if (array[j]以上為選擇排序算法詳細(xì)介紹,插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等排序算法各有優(yōu)缺點(diǎn),用一張圖概括: 

    關(guān)于時間復(fù)雜度

    平方階 (O(n2)) 排序 各類簡單排序:直接插入、直接選擇和冒泡排序。

    線性對數(shù)階 (O(nlog2n)) 排序 快速排序、堆排序和歸并排序;

    O(n1+§)) 排序,§ 是介于 0 和 1 之間的常數(shù)。 希爾排序

    線性階 (O(n)) 排序 基數(shù)排序,此外還有桶、箱排序。

    關(guān)于穩(wěn)定性

    穩(wěn)定的排序算法:冒泡排序、插入排序、歸并排序和基數(shù)排序。

    不是穩(wěn)定的排序算法:選擇排序、快速排序、希爾排序、堆排序。

    名詞解釋:

    n:數(shù)據(jù)規(guī)模

    k:"桶"的個數(shù)

    In-place:占用常數(shù)內(nèi)存,不占用額外內(nèi)存

    Out-place:占用額外內(nèi)存

    穩(wěn)定性:排序后 2 個相等鍵值的順序和排序之前它們的順序相同

    文檔

    選擇排序代碼

    選擇排序是一種簡單直觀的排序算法,無論什么數(shù)據(jù)進(jìn)去都是 O(n?) 的時間復(fù)雜度。所以用到它的時候,數(shù)據(jù)規(guī)模越小越好。唯一的好處可能就是不占用額外的內(nèi)存空間。
    推薦度:
    為你推薦
    資訊專欄
    熱門視頻
    相關(guān)推薦
    基數(shù)排序算法數(shù)據(jù)結(jié)構(gòu) c語言冒泡排序法流程圖 桶排序基本算法 c語言計數(shù)排序算法 堆排序第一趟怎么求 快速排序c++代碼 有關(guān)動物的古詩 歸并排序奇數(shù)個怎么排 希爾排序法實例 簡單選擇排序算法 基數(shù)排序是一種基于 冒泡排序算法是幾層循環(huán) 桶排序思想 計數(shù)排序 堆排序算法實現(xiàn) 快速排序算法圖解 與動物有關(guān)的古詩 歸并排序是穩(wěn)定排序嗎 希爾排序過程 選擇排序c語言 希爾排序算法vb 歸并排序算法流程圖 描寫燕子的經(jīng)典詩句 踏青詩詞佳句 含有動物的古詩 java快速排序簡單代碼 數(shù)據(jù)結(jié)構(gòu)堆排序例題 計數(shù)排序c 桶排序算法java java冒泡排序代碼 基數(shù)排序算法代碼 直接選擇排序穩(wěn)定嗎 希爾排序?qū)崿F(xiàn) 歸并排序算法python思想 關(guān)于描寫燕子的詩句 關(guān)于踏青的唯美詩句 帶有動物的古詩 快速排序算法java 描寫蘭花的詩句古詩 堆排序算法規(guī)則
    Top 精品国产精品国产偷麻豆| 亚洲精品乱码久久久久久蜜桃 | 久久精品国产亚洲av麻豆| 国产精品国产三级国产在线观看| 久久狠狠高潮亚洲精品| 国内精品久久久久影院日本| 国产偷窥熟女精品视频| 亚洲国产美女精品久久久| 久久国产亚洲精品无码| 久久综合精品不卡一区二区| 精品国产毛片一区二区无码| 国产精品亚洲va在线观看| 国内精品久久久久影院老司| 99j久久精品久久久久久| 精品久久久久久久| 国产精品 羞羞答答在线| 国产成人精品高清免费| 国产精品成人久久久久久久| 国产精品久久久久久久app | 日韩精品一线二线三线优势| 99久久综合精品免费| 国产精品对白刺激久久久| 韩日美无码精品无码| 精品91自产拍在线观看二区| 精品一区精品二区| 国产成人亚洲精品无码AV大片| 国产精品视频一区国模私拍| 国产精品专区第二| 91精品国产综合久久四虎久久无码一级| 久久精品国产成人AV| 亚洲av永久无码精品秋霞电影影院| 自拍偷自拍亚洲精品被多人伦好爽 | 久久久无码人妻精品无码| 国产精品99精品无码视亚| 国产精品女同一区二区| 久久99精品国产99久久6男男| 亚洲精品成人片在线播放| 久久精品成人国产午夜| 国产精品国产三级国产普通话| 亚洲爆乳精品无码一区二区三区 | 久热综合在线亚洲精品|