排序演算法之三 直接選擇排序

2021-07-22 20:03:03 字數 1179 閱讀 8377

簡單選擇排序(****** selection sort)在八大排序中是最容易理解的部分

演算法(從小到大):

在要排序的序列中,從頭到尾遍歷,選出最小的數與第乙個位置的數交換。

在剩餘的序列中,從頭到尾遍歷,選出最小的數與剩餘序列第乙個位置的數交換(原序列第二個位置),不斷地迴圈下去,直至序列只剩下乙個數。

演算法演示:

2    34    34    1        40     45     78     32     91

第一次遍歷:   1

34    34    2        40    45     78     32     91

第二次遍歷   

12      34   3440    45     78     32     9

1。。。。

voidselect_sort(datatype r,intn)

}

}

時間複雜度:

最差情況:初始序列的第乙個數最大,後面序列按照從小到大一次排列,則需要移動次數為n次。

需要比較的次數與初始序列的狀態無關,共需要比較的次數是  (n-1)+(n-2)+(n-3)+...+1=n*(n-1)/2

總共時間複雜度是o(n2)

空間複雜度:o(1)

穩定性:不穩定,由上面的演算法演示中可以看出,兩個34,排序之後相對順序是會發生改變的

簡單選擇排序的過程中每一次遍歷都是尋找最小值,但是也可以對其改進,在每一次遍歷的過程中都尋找剩餘序列的最小值和最大值,那樣就可以節約很多時間

(借鑑 -- 高傑才)

void sort(int a, int

n)

if(a[min]>a[j])

}temp = a[i-1];

a[i-1] =a[min];

a[min] =temp;

temp = a[n-i];

a[n-i] =a[max];

a[max] =temp;

}}

(以上**有待修改)

內部排序演算法之三 選擇排序

1.1.基本描述 元素個數為n的陣列,需要按照由小到大的順序進行元素排序。1.2.演算法分析 選擇排序的基本思想 每一趟排序從未排好序的部分元素中選擇乙個值最小的元素,然後將其與這些未排好序的元素的第乙個元素交換位置 容易發現,時間複雜度為o n 2 是 不穩定排序。public class sel...

排序演算法之 直接選擇排序(三)

直接選擇排序與直接插入排序類似,都將資料分為有序區與無序 區,不同點 直接插入排序是將無序區第乙個元素直接插入到有序區形成 更大的有序區,直接選擇排序是從無序區選乙個最小的元素直接放到有序區最後 include include include define n 10 using namespace ...

排序演算法(直接選擇排序)

為什麼我們要叫直接選擇排序呢?在最開始的時候,待排序區間是整個陣列,從區間選乙個最小的與區間第乙個交換位置,然後將待排序區間從第二個開始,繼續以上操作,直至待排序區間長度為0 我們還是以為例 初始 3 5 7 9 8 6 2 1 4 0 第一趟 05 7 9 8 6 2 1 4 3 第二趟 0 17...