1. 程式人生 > >經典演算法(二):選擇排序

經典演算法(二):選擇排序

昨天我們學習了經典中的經典,氣泡排序,今天我們來學習另一個經典演算法:選擇排序。

一、演算法描述

掃描所有的元素,得到最小(最大·)的元素,並將最小(最大)的元素與左邊第一個元素進行交換。再掃描除第一個位置以外的所有元素,得到最小(最大)元素,與左邊第二個元素進行交換,以此類推。

如果還不理解(以下以最小元素為例),看下圖:

這裡寫圖片描述

我來解釋一下,首先原始資料是:20 40 30 10 60 50然後我們第一次迴圈,發現 10 要比其他的都要小,我們要與左邊第一個進行交換,所以就是與 20 進行位置交換,交換後如圖:第2趟;然後我們在對除了 10 以外的所有數進行再次迴圈比較,發現這次 20 要比其他的都要小,然後我們要與左邊第二個進行交換,所以就是與 40

進行位置交換,交換後如圖:第3趟,以此類推。

二、演算法實現

public class SelectSort {

    public static void main(String[] args) {
        int arrs[] = { 1, 8, 9, 45, 36, 15, 7, 36, 190, 699, 100 };
        int temp;
        // 標記,用來標記最小的那個元素
        int min = 0;
        for (int i = 0; i < arrs.length - 1; i++) {
            // 預設左邊是最小元素
min = i; for (int j = i + 1; j < arrs.length; j++) { if (arrs[j] < arrs[min]) { // 將標記指向最小元素 min = j; } } // 交換位置 temp = arrs[i]; arrs[i] = arrs[min]; arrs[min] = temp; } for
(int i = 0; i < arrs.length; i++) { System.out.print(arrs[i] + "\t"); } } }

我對程式碼進行解釋一下:第一個for迴圈,其實和昨天我們氣泡排序的思路一樣,所以就是 n 個元素,只需 n - 1次迴圈就可以實現排序。
第二個for迴圈是用來與不是第一個位置的數進行比較,並找到最小元素,並把min標記指向這個數,然後再進行位置替換。第二個for 為什麼不是“arrs.length - 1”,我們不是說了,要做 n - 1次迴圈,由於第二個for迴圈起始位置要比第一個大 1,為了也迴圈 n - 1次,所以此處是 : arrs.length

最後看執行結果:

這裡寫圖片描述

三、總結

選擇排序就是找出最小(最大)的然後與左邊從第一個元素進行位置交換,直到排序完成。學習完選擇排序,是不是感覺演算法沒有想象中的那麼難!!如有疑問,請給我留言,謝謝大家支援!!

相關推薦

經典演算法選擇排序

昨天我們學習了經典中的經典,氣泡排序,今天我們來學習另一個經典演算法:選擇排序。 一、演算法描述 掃描所有的元素,得到最小(最大·)的元素,並將最小(最大)的元素與左邊第一個元素進行交換。再掃描除第一個位置以外的所有元素,得到最小(最大)元素,與左邊第二

演算法氣泡排序

氣泡排序(Bubble Sort),是一種電腦科學領域的較簡單的排序演算法。 它重複的走訪過要排列的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來,走訪數列的工作是重複的進行直到沒有有再需要交換,也就是說該數列已經排序完成。 這個演算法的名字由來是因為越大的元素會

排序選擇排序

前言:有時候,我會覺得,凡事只要有個目標,便可以朝著它努力,這樣必定會有結果;可是,慢慢的我發現,在生活中,太多的我們追求的事情,是沒有目標的,這也正是我現階段困惑的東西,我只能一步步的去試探,試圖發現

Java常用的八種排序演算法與程式碼實現歸併排序法、快速排序

注:這裡給出的程式碼方案都是通過遞迴完成的 --- 歸併排序(Merge Sort):   分而治之,遞迴實現   如果需要排序一個數組,我們先把陣列從中間分成前後兩部分,然後對前後兩部分進行分別排序,再將排好序的數組合並在一起,這樣整個陣列就有序了   歸併排序是穩定的排序演算法,時間

演算法訓練營排序

堆排序過程 建立大頂堆或者小頂堆,大頂堆(一種二叉樹型結構,子樹節點值都小於父節點的值)。這個過程的要點是:先從最後一個非葉子節點開始構建堆,因為最後一個非葉子節點才有可能需要調整,然後向前查詢的節點都有子樹,都有可能需要調整。 排序過程。建立好了大頂堆,那麼第一個節

演算法快學筆記選擇排序的原理與實現

1. 原理介紹 選擇排序是個簡單的排序,思路主要通過多次遍歷待排序的集合,每次彈出最大/小值並放入新的集合,直到原始集合為空。舉個例子: 假設要對A=[1,2,5,9,3]按照升序的方式進行排序,步驟與結果如下 從A中找出最大值,將其pop,並放入B中,執行後的結果如下:

經典排序演算法6——直接選擇排序演算法詳解

直接選擇排序(Straight Select Sort)是一種典型的選擇排序演算法,通過不斷選擇序列中最大(小)的元素。 一、演算法基本思想 (1)基本思想 直接選擇排序的基本思想就

array和list排序演算法對比歸併排序

接著上一篇文章,這裡簡單討論陣列和連結串列的歸併排序在演算法設計上的區別。 歸併排序的特點是採用二分的策略,將陣列的子陣列進行排序,然後將兩個有序的子數組合併成一個大的有序陣列。如果採用陣列結構,二分是非常簡單的操作,但二分後的合併空間開銷相對較大。如果採用連

算法 簡單選擇排序

簡單選擇排序從左到右依次選取一個值作為默認最大值,依次與其它值比較,如果有值比該值大,那最大值指針改指向該值,一輪比較完成後,如果最大值指針沒有變化,則從下一個值繼續下一輪比較,如果指針有變動,則最新指針位置的數值與初始指針位置數值交換位置。代碼如下:lst1 = [ [1, 8, 9, 5, 6,

[Swift]八大排序算法快速排序

addition 每次 數據交換 uri 基本思想 技術分享 繼續 splay 休眠 排序分為內部排序和外部排序。 內部排序:是指待排序列完全存放在內存中所進行的排序過程,適合不太大的元素序列。 外部排序:指的是大文件的排序,即待排序的記錄存儲在外存儲器上,待排序的文件

Java並發排序

技術分享 安排 通過 mage 種類 操作 處理器 加載 str 在執行程序時為了提高性能,提高並行度,編譯器和處理器常常會對指令做重排序。重排序分三種類型: 編譯器優化的重排序。編譯器在不改變單線程程序語義的前提下,可以重新安排語句的執行順序。 指令級並行的重排序。現代

深入理解線性迴歸演算法正則項的詳細分析

前言 當模型的複雜度達到一定程度時,則模型處於過擬合狀態,類似這種意思相信大家看到個很多次了,本文首先討論了怎麼去理解複雜度這一概念,然後回顧貝葉斯思想(原諒我有點囉嗦),並從貝葉斯的角度去理解正則項的含義以及正則項降低模型複雜度的方法,最後總結全文。     &nb

「日常訓練&知識學習」莫隊演算法樹上莫隊Count on a tree II,SPOJ COT2

題意與分析 題意是這樣的,給定一顆節點有權值的樹,然後給若干個詢問,每次詢問讓你找出一條鏈上有多少個不同權值。 寫這題之前要參看我的三個blog:CFR326D2E、CFR340D2E和HYSBZ-1086,然後再看這幾個Blog—— 參考A:https://blog.sengxian.com/algori

小朋友學經典演算法14回溯法和八皇后問題

一、回溯法 回溯法(探索與回溯法)是一種選優搜尋法,又稱為試探法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為“回溯點”。 二、八皇后問題 (一)問

移動推薦演算法基於簡單規則的預測

本文為轉載文章,來源為: https://blog.csdn.net/Snoopy_Yuan/article/details/72850601 一直在探索資料探勘、資料建模的案例,百度搜到這篇文章,收穫頗豐,轉載以作記錄。 前言:移動推薦演算法是阿里天池賽2015年賽題之

排序演算法選擇排序 —— 簡單選擇排序 和 堆排序

1、簡單選擇排序簡單選擇排序思想是:從頭到尾(從後往前也行)遍歷序列,先固定第一個位置的資料,將該位置後面的資料,依次和這個位置的資料進行比較,如果比固定位置的資料大,就交換。這樣,進行一趟排序以後,第一個位置就是最小的數了。然後重複進行,第 2 次遍歷並且比較後,第二個位置

基礎演算法Kmeans聚類演算法的基本原理與應用

Kmeans聚類演算法的基本原理與應用       內容說明:主要介紹Kmeans聚類演算法的數學原理,並使用matlab程式設計實現Kmeans的簡單應用,不對之處還望指正。 一、Km

最優化演算法牛頓法

1.推導        牛頓法和擬牛頓法是求解無約束最優化問題的常用方法,它們比梯度下降收斂更快。考慮同樣的一個無約束最優化問題:                                                                      

排序演算法1氣泡排序和插入排序

1.1 氣泡排序 氣泡排序需要多次遍歷列表。它比較相鄰的項並交換那些無序的項。每次遍歷列表將下一個最大的值放在其正確的位置。實質上,每個項“冒泡”到它所屬的位置。 用python寫交換操作時,與大多數程式語言略有不同(需要臨時儲存位置),python可以執行

排序選擇排序

一、步驟 1、找到陣列中的最小元素; 2、將第一步找到的最小元素與陣列第一個元素交換位置(如果第一個元素就是最小元素則和自己交換); 3、在剩下的元素中找到最小元素,將它與第二個元素交換位置。如此