選擇排序 最簡單的排序

2021-08-20 09:18:28 字數 1151 閱讀 1321

最容易想到的排序,給你一串數字,如何按照從小到大排序。我們可以從數字中找出最小的數,把它從舊的資料中剔除,放在新陣列的第一位,然後從餘下的數字中再找出最小的,放到第二位,這樣一直找,直到原陣列還剩下一位的時候,把這一位直接放到新陣列的最後一位。

我們也可以不新建陣列,沒有必要浪費這一倍的空間,在找到最小的數之後,把該位置和第一位互換,然後找到次小的和第二位互換,直到還剩下一位。

推演**的時候,先推演大結構,再推演細節。

推演細節的時候,從一般到特殊,實在想不出來,構建乙個假陣列資料推一下就行了。

盡量寫直白的**,和演算法思路相同的**,可以後期去合併邏輯,但是一開始最好直接寫。

1、兩層迴圈,外層迴圈控制次數,內層迴圈控制尋找與交換

2、第一次從[0到n)中找出最小的位置,然後將最小位置和0互換,第二次從[1到n)中找出最小的位置,然後和1互換,直到倒數第二位(下標為n-2)

3、交換的方法會出現很多次,我們最終應該將這個方法抽出來。

public static void main(string args) ;

system.out.println(arrays.tostring(selectsort(arr)));

}private static int selectsort(int arr)

}// 如果找到的位置不是原始的位置,才進行交換

if(idx != i)

}return arr;

}/**

* 交換元素

* @param arr

* @param i

* @param j

*/private static void swap(int arr, int i, int j)

比較次數為:1 + 2 + 3 + 4 + (n-1) = n * (n-1) /2 ,去除常數,也就是o(n^2),無論最好最壞情況都是o(n^2)次

交換次數:最好情況下,本身陣列就是按次序的,交換次數為0,完全反序,交換次數為n-1,也就是介於0~n-1之間。

跨元素交換,不穩定。

假設資料為5 5 9 1,一次交換後會變成1 5 9 5,前面的乙個5會跑到後面去,也就是不穩定,因為1 5 進行交換的時候,並不會考慮其它的。一般存在不相鄰的元素交換的排序演算法都是不穩定的。

寫好最簡單的選擇排序

選擇排序,所有排序演算法中最簡單的乙個,不是嘛,如果有哪本程式設計書中沒有直接或者間接的含有這個演算法,真的換一本吧 在此僅以此部落格記錄一下,我所認識的選擇排序。選擇排序,為什麼取這個名?之所以叫選擇排序,是因為每次都是要從剩餘的序列中選擇乙個最大 最小 的元素將其放在最終位置 有序時元素所在的位...

選擇排序 簡單選擇排序

在要排序的一組數中,選出最小 或者最大 的乙個數與第1個位置的數交換 然後在剩下的數當中再找最小 或者最大 的與第2個位置的數交換,依次類推,直到第n 1個元素 倒數第二個數 和第n個元素 最後乙個數 比較為止。第一趟,從n個記錄中找出關鍵碼最小的記錄與第乙個記錄交換 第二趟,從第二個記錄開始的n ...

選擇排序 簡單選擇排序

1.選擇排序 簡單選擇排序,堆排序 與交換排序 氣泡排序,快速排序 的區別 每次比較如果發現較小的元素在後面,就交換兩個相鄰的元素。而選擇排序演算法的改進在於 先並不急於調換位置,先從a 1 開始逐個檢查,看哪個數最小就記下該數所在的位置p,等一躺掃瞄完畢,再把a p 和a 1 對調,這時a 1 到...