最新文章專題視頻專題關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
蘋果手機怎么開機的 年齡劃分 排名前十位的衣服品牌 蘋果手機為什么電量低就自動關機 獅子老虎到底哪個厲害 怎么把手機相冊里面的照片傳到電腦上 可以怎樣注冊為美團騎手 聯通手機號怎么查話費余額 香水中的前調中調尾調是什么意思 五個不發生的內容是什么 轉向燈開關向上提哪個燈亮 怎么在表格中嵌入圖片 三寶四口五臨邊指的是什么 考駕照科目一沒過可以退錢嗎 計算機專業對電腦配置要求 35萬按揭20年月供多少 手機短信如何全部刪除 更換手機號碼需要注意什么 誰知道海賊王里面主要人物的年齡 521代表什么愛情含義 辯論技巧 求幾本變身百合小說一定要完結的 英雄聯盟進入加載界面卡住 q235a和q235b的區別是什么 水準測量的距離怎么算 關于戀愛的詩句 excel多余的幾萬行怎么刪 空氣炸鍋專家建議不宜多用 電瓶車一般充電幾小時 女生喜歡一個人的表現有哪些 農學類的什么專業比較好就業 屬狗的幸運數字 民辦??坪凸k??朴惺裁床煌?/a> 開速騰一般什么檔次人 神學的盡頭是什么 微信歷史狀態怎么看 微信被拉入黑名單還能看到朋友圈嗎 屬虎人運勢上升的預兆 天氣預警里的顏色劃分等級 駕照考一半能轉到異地嗎
當前位置: 首頁 - 科技 - 知識百科 - 正文

選擇排序c語言代碼

來源:懂視網 責編:小采 時間:2022-08-04 15:22:35
文檔

選擇排序c語言代碼

選擇排序是一種簡單直觀的排序算法,無論什么數據進去都是 O(n?) 的時間復雜度。所以用到它的時候,數據規模越小越好。唯一的好處可能就是不占用額外的內存空間。
推薦度:
導讀選擇排序是一種簡單直觀的排序算法,無論什么數據進去都是 O(n?) 的時間復雜度。所以用到它的時候,數據規模越小越好。唯一的好處可能就是不占用額外的內存空間。

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

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

1. 算法步驟

首先在未排序序列中找到最?。ù螅┰?,存放到排序序列的起始位置。

再從剩余未排序元素中繼續尋找最?。ù螅┰?,然后放到已排序序列的末尾。

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

2. 動圖演示


代碼實現

JavaScript 代碼實現

實例

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]) {     // 尋找最小的數
                minIndex = j;                 // 將最小數的索引保存
            }
        }
        temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
    return arr;
}

Python 代碼實現

實例

def selectionSort(arr):
    for i in range(len(arr) - 1):
        # 記錄最小數的索引
        minIndex = i
        for j in range(i + 1, len(arr)):
            if arr[j] < arr[minIndex]:
                minIndex = j
        # i 不是最小數時,將 i 和最小數進行交換
        if i != minIndex:
            arr[i], arr[minIndex] = arr[minIndex], arr[i]
    return arr

Go 代碼實現

實例

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 代碼實現

實例

public class SelectionSort implements IArraySort {

    @Override
    public int[] sort(int[] sourceArray) throws Exception {
        int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);

        // 總共要經過 N-1 輪比較
        for (int i = 0; i < arr.length - 1; i++) {
            int min = i;

            // 每輪需要比較的次數 N-i
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[min]) {
                    // 記錄目前能找到的最小值元素的下標
                    min = j;
                }
            }

            // 將找到的最小值和i位置所在的值進行交換
            if (i != min) {
                int tmp = arr[i];
                arr[i] = arr[min];
                arr[min] = tmp;
            }

        }
        return arr;
    }
}

PHP 代碼實現

實例

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) //交換兩個變數
{
    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;    //紀錄最小值
                swap(&arr[min], &arr[i]);    //做交換
        }
}

C++

實例

template<typename T> //整數或浮點數皆可使用,若要使用物件(class)時必須設定大於(>)的運算子功能
void selection_sort(std::vector<T>& 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>(T[] arr) where T : System.IComparable<T>{//整數或浮點數皆可使用
        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: 需要排序的數組
func selectionSort(_ list: inout [Int]) -> Void {
    for j in 0..<list.count - 1 {
        var minIndex = j
        for i in j..<list.count {
            if list[minIndex] > 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

以下是熱心網友對選擇排序算法的補充,僅供參考:

熱心網友提供的補充1:

Kotlin 實現

class SelectionSort { 
    /** 
    * 拓展IntArray為他提供數據兩個數交換位置的方法 
    * @param i 第一個數的下標 
    * @param j 第二個數的下標 
    */ 
    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){ 
            //假設最小值是i 
            var min=i 
            var j=i+1 
            while (j in array.indices){ 
                if (array[j]<array[min]){ 
                    min=j
                }
                j++ 
            } 
            if (i!=min){
                array.swap(i,min) 
            } 
        } 
        return array; 
    }
}
以上為選擇排序算法詳細介紹,插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數排序等排序算法各有優缺點,用一張圖概括:

關于時間復雜度

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

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

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

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

關于穩定性

穩定的排序算法:冒泡排序、插入排序、歸并排序和基數排序。

不是穩定的排序算法:選擇排序、快速排序、希爾排序、堆排序。

名詞解釋:

n:數據規模

k:"桶"的個數

In-place:占用常數內存,不占用額外內存

Out-place:占用額外內存

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

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:0731-84117792 E-MAIL:11247931@qq.com

文檔

選擇排序c語言代碼

選擇排序是一種簡單直觀的排序算法,無論什么數據進去都是 O(n?) 的時間復雜度。所以用到它的時候,數據規模越小越好。唯一的好處可能就是不占用額外的內存空間。
推薦度:
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題用高壓鍋煮飯香的原因用高壓鍋煮飯香的原因專題不銹鋼鍋光亮如新的使用技巧不銹鋼鍋光亮如新的使用技巧專題家用電烤箱的結構特點家用電烤箱的結構特點專題熱水器有哪幾種類型熱水器有哪幾種類型專題什么是化妝品什么是化妝品專題怎樣選擇祛斑化妝品怎樣選擇祛斑化妝品專題夏季如何正確保存化妝品夏季如何正確保存化妝品專題過期化妝品再利用過期化妝品再利用專題如何儲存大米不受潮如何儲存大米不受潮專題教育培訓機構選址技巧教育培訓機構選址技巧專題教育培訓機構三大經營技巧教育培訓機構三大經營技巧專題教育培訓機構如何做網絡推廣教育培訓機構如何做網絡推廣專題教育培訓機構網絡營銷策略教育培訓機構網絡營銷策略專題布藝家具巧利用布藝家具巧利用專題別致布藝家具裝點小資柔情別致布藝家具裝點小資柔情專題布藝家具保養使用方法布藝家具保養使用方法專題化妝品加工定義與模式及專業術語的介紹化妝品加工定義與模式及專業術語的介紹專題化妝品過敏反應分類與解決辦法化妝品過敏反應分類與解決辦法專題化妝品基礎知識簡述化妝品基礎知識簡述專題化妝品的選購誤區化妝品的選購誤區專題教你怎樣辨別化妝品好壞的小竅門教你怎樣辨別化妝品好壞的小竅門專題化妝品是什么時候出現的化妝品是什么時候出現的專題化妝品的發展歷史化妝品的發展歷史專題化妝品的分類(一)化妝品的分類(一)專題化妝品中中草藥的作用化妝品中中草藥的作用專題化妝品收納盒有用嗎化妝品收納盒有用嗎專題怎樣選購一款好的化妝品收納盒怎樣選購一款好的化妝品收納盒專題婦女懷孕后使用化妝品注意婦女懷孕后使用化妝品注意專題化妝品禁用語化妝品禁用語專題化妝品原料簡介化妝品原料簡介專題
Top
国产精品久久久久精品…-国产精品可乐视频最新-亚洲欧美重口味在线-欧美va免费在线观看