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

排序(二):選擇排序法

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

基本思想:

在排序的一組數中,選出最小的數與第一個數互換,如果本身就是則保持原位,接著再重剩下的數中選出最小的數與第二個數互換,直到最後兩個數為止。

大概流程圖如圖所示:
選擇排序

java程式碼實現:

import java.util.Scanner;

public class SelectSort {

    public
static void main(String[] args) { int[] numbers = new int[5]; Scanner scanner = new Scanner(System.in); for(int i=0;i<numbers.length;i++){ numbers[i] = scanner.nextInt(); } selectSort(numbers); for(int j =0;j<numbers.length;j++){ System.out
.print(numbers[j]+","); } } public static void selectSort(int[] numbers){ int size = numbers.length; int temp = 0; for(int i =0;i<size-1;i++){ int k = i; for(int j=size-1;j>i;j--){ if(numbers[j]<numbers[k]){ k = j; } } temp = numbers[i]; numbers[i] = numbers[k]; numbers[k]= temp; } } }

舉例執行:
輸入:9,4,8,3,6
輸出:3,4,6,8,9

時間複雜度O(n*n) 效能上優於氣泡排序 交換次數少
因為氣泡排序法每次迴圈都要判斷是否較大(較小)然後進行交換,而選擇排序法則只需選中最小的數與第一個數進行交換,迴圈下去,所以節省了許多交換次數。

我們可以看下有人做出的時間計算資料:

這裡寫圖片描述

這裡寫圖片描述

從圖中我們可以看出:當陣列長度到達一定數目,氣泡排序的效能明顯低於選擇排序。

相關推薦

排序選擇排序

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

經典演算法選擇排序

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

排序選擇排序

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

八大排序歸併排序

歸併排序(MERGE-SORT)是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法(Divide and Conquer)的一個非常典型的應用。分治法即將問題分(divide)成一些小的問題然後遞迴求解,而治(conquer)的階段則將分的階段得

簡單選擇排序

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

[Swift]八大排序快速排序

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

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

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

Java並發排序

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

排序氣泡排序、插入排序選擇排序

如何分析一個排序演算法? 分析一個排序演算法的三要素:排序演算法的執行效率、排序演算法的記憶體消耗以及排序演算法的穩定性。 排序演算法的執行效率 對於排序演算法執行效率的分析,一般是從以下三個方面來衡量: 最好情況、最壞情況、平均情況時間複雜度 時間複雜度的係數、常數、低階 比較次數和交

排序冒泡排序、插入排序選擇排序

最壞情況 選擇排序 main 評價 先後 序列 emp 復雜度 基本思想 如何分析一個排序算法? 分析一個排序算法的三要素:排序算法的執行效率、排序算法的內存消耗以及排序算法的穩定性。 排序算法的執行效率 對於排序算法執行效率的分析,一般是從以下三個方面來衡量: 最好情況

演算法訓練營排序

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

演算法氣泡排序

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

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

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

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

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

基本排序插入排序 和 希爾排序- 從後向前掃描,比正操作元素大的逐步移位

1. 插入排序 插入排序(Insertion Sort)工作原理(維基百科) 通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置插入。插入排序實現上,通常採用in-place排序(即只需用到O(1)的額外空間的排序),因而在從後向

Java排序分析與實現快排、冒泡排序選擇排序、插入排序、歸並排序

第一個元素 spa insert 循環 冒泡排序 author 高級算法 ins -s 一、概述:   上篇博客介紹了常見簡單算法:冒泡排序、選擇排序和插入排序。本文介紹高級排序算法:快速排序和歸並排序。在開始介紹算法之前,首先介紹高級算法所需要的基礎知識:劃分、遞歸,並順

Java常用的八種排序演算法與程式碼實現氣泡排序、插入排序選擇排序

這三種排序演算法適合小規模資料排序 ---   共同點:基於比較,時間複雜度均為O(n2),空間複雜度均為O(1)(原地排序演算法)   不同點:插入排序和氣泡排序是穩定的排序演算法,選擇排序不是 ---   穩定排序演算法:可以保持數值相等的兩個物件,在排序之

編程題#3奇偶排序

log cnblogs 保存 比較 如果 () return names space #include <iostream> using namespace std; int main() { int n, a[1000]; // 一共n個數,n不超過

二元選擇排序

二元選擇排序二元選擇排序在簡單選擇排序的基礎上,一輪中同時比較出最大值與最小值lst1 = [ [1, 8, 9, 5, 6, 7, 4, 3, 2], [9, 8, 7, 6, 5, 4, 3, 2, 1], [1, 2, 3, 4, 5, 6, 7, 8, 9], [1,

[數據結構]七種排序的C++簡單實現

末尾 技術分享 下標 ima http 直接 wap temp 部分 一.冒泡排序(Bubble Sort) 基本思想:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。 //冒泡排序 void BubbleSort(int *p, int lengt