【排序算法】選擇排序原理及Java實現

1、基本思想:

選擇排序是一種簡單直觀的排序算法,其基本原理如下:對於給定的一組記錄,經過第一輪比較後得到最小的記錄,然後將該記錄的位置與第一個記錄的位置交換;接着對不包括第一個記錄以外的其他記錄進行第二次比較,得到最小記錄並與第二個位置記錄交換;重複該過程,知道進行比較的記錄只剩下一個爲止。

2、複雜度分析:

從簡單選擇排序的過程來看,它最大的特點是交換移動數據次數相當少,這樣就節約了相應的時間。分析它的時間複雜度發現,無論是最好最差情況,其比較次數都是一樣多,第 i 趟排序需要進行 n-i 次關鍵字比較,此時需要比較次這裏寫圖片描述,對於交換次數而言,當最好的時候,交換0次,最差的時候,也就是初始降時,交換次數爲 n-1 次,基於最終的時間排序與交換次數總和,因此,總的時間複雜度依然爲這裏寫圖片描述
儘管與冒泡排序同爲這裏寫圖片描述,但簡單選擇排序的性能要優於冒泡排序。

3、排序過程如下:

以數組{49,38,65,97,76,13,27,49}爲例,
這裏寫圖片描述

4、Java實現如下:

public class SelectSort {

    public static void selectSort(int[] a) {
        if (a == null || a.length <= 0) {
            return;
        }
        for (int i = 0; i < a.length; i++) {
            int temp = a[i];
            int flag = i; // 將當前下標定義爲最小值下標
            for (int j = i + 1; j < a.length; j++) {
                if (a[j] < temp) {// a[j] < temp 從小到大排序;a[j] > temp 從大到小排序
                    temp = a[j];
                    flag = j; // 如果有小於當前最小值的關鍵字將此關鍵字的下標賦值給flag
                }
            }
            if (flag != i) {
                a[flag] = a[i];
                a[i] = temp;
            }
        }
    }

    public static void main(String[] args) {
        int a[] = { 49,38,65,97,76,13,27,49 };
        selectSort(a);
        System.out.println(Arrays.toString(a));
    }
} 
發佈了53 篇原創文章 · 獲贊 559 · 訪問量 88萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章