選擇排序

選擇排序是一種最簡單的排序方式,主要的思想:

首先,找到數組中最小的那個數及其下標,將最小的這個數與數組第一個數交換位置,那麼這個最小的數就在數組的第一個位置了,然後從數組第二個位置開始尋找最小的數,找到後與數組的第二個位置的數進行交換,如果沒找到,就自己交換自己。反覆下去,就得到了排序的數組。這種方法就叫選擇排序,因爲它總是在不選的選擇剩餘元素的最小值。

案例圖示:

代碼

    public static void select(int[] a)
    {
        for (int i=0;i<a.length;i++)
        {
            int temp=a[i];//將未排序的第一個元素存到temp
            int k=i;//將未排序的第一個元素的下標保存到k
            int p;//作爲兩個元素交換的過渡值
            for (int j=i+1;j<a.length;j++)
            {

                if(temp<a[j])//找出未排序元素的最小值和下標
                {
                    temp=a[j];
                    k=j;
                }

            }
            //如果未排序的第一個元素本身就是最小值了,那麼此時的i與k就是相等的,相當於自身交換
            p=a[i];
            a[i]=temp;
            a[k]=p;
        }
    }

兩個特點

1.運行時間與輸入無關,因爲不論是亂序數組還是已經有序的數組,它都會進行比較和交換。

2.數據移動是最少的,每次交換都會改變兩個數組元素的值,因此如果數組大小是N的話,就交換了N次,因此交換次數與數組大小成線性關係

時間複雜度分析:

爲了確定數組第一個位置的元素,需要比較N-1次,確定數組第二個位置的元素,需要比較N-2次,以此類推,總共需要比較(N-1)+(N-2)+......+2+1=N*(N-1)/2,所以時間複雜度爲O(N^2)

發佈了18 篇原創文章 · 獲贊 8 · 訪問量 8728
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章