1. 程式人生 > >演算法學習筆記--選擇排序

演算法學習筆記--選擇排序

前言:深知自己在演算法方面的菜,所以最近買了本演算法的書,本系列就作為該書的學習筆記。

就是這本:演算法(名字就叫演算法。。。)

作為演算法學習筆記的第一篇,當然從最簡單的排序演算法開始:選擇排序。

排序過程:先找到陣列中最小的那個元素,然後它和陣列中第一個元素交換位置,接著在剩餘的元素中找到最小的元素,與第二個元素交換,如此往復,直到將整個陣列排序。

java實現如下:

/**
 * 選擇排序
 */
public class Selection {

    public static void sort(int[] a){

        int N = a.length;        //陣列長度
for (int i = 0; i < N; i++){ //將a[i]與a[i+1...N]中最小的元素交換 int min = i; //最小元素的索引 for (int j = i+1; j < N; j++){ if(a[j] < a[min]){ min = j; } } int temp = a[i]; a[i] = a[min]; a[min] = temp; } } }

選擇排序的軌跡圖:

這裡寫圖片描述

選擇排序的特點:

1、對於長度為N的陣列,選擇排序大約需要(N^2)/2次比較和N次交換。

2、執行時間與輸入無關。為了找到對小的元素,需要掃描一遍元素,但是前一次掃描,不能為下一次掃描提供資訊。為一個有序陣列和一個等長的無序陣列,所用的排序時間竟然是一樣長的。

3、資料的移動是最少的。由於選擇排序用了N次交換—交換次數和陣列的大小是線性關係。

(不會點演算法,還好意思說自己是程式設計師嗎 :逃)