排序 選擇排序(C )

2021-07-10 12:23:15 字數 2003 閱讀 1789

1、選擇排序的核心思想是:

1)第1趟排序是從第

1個元素

後面的 

n - 1

個元素中選擇乙個值最小於第1

個元素的元素與第

1個元素交換位置;

2)第2

趟排序是從第

2個元素後面的

n-2個元素中選擇乙個值最小於第

2個元素的元素與第

2個元素交換位置;

3)以此類推,知道第n-1

趟,排序結束。

第 i 

趟排序是從後面的 

n - i

(i = 1,2

,3,4

,. . .

,n - 1

)個元素中選擇乙個值最小的元素與該 

n - i + 1 

個元素的最前門的那個元素交換位置,即與整個序列的第 

i 個元素交換位置。如此下去,直到 

i = n - 1

,排序結束。每一趟排序從序列中未排好序的那些元素中選擇乙個值最小的元素,然後將其與這些未排好序的元素的第乙個元素交換位置。

2、選擇排序的特點:

1. 演算法完成需要 

n - 1 

趟排序,按照演算法的描述,

n - 1 

趟排序之後陣列中的前 

n - 1 

個元素已經處於相應的位置,第 

n 個元素也處於相應的位置上。

2. 第 

i 趟排序,實際上就是需要將陣列中第 

i 個元素放置到陣列的合適位置,這裡需要乙個臨時變數 

j 來遍歷序列中未排好序的那些元素,另一臨時變數 

d 來記錄未排好序的那些元素中值最小的元素的下標值,

3. 一趟遍歷開始時,令 

d = i

,假定未排序序列的第乙個元素就是最小的元素,遍歷完成後,變數 

d 所對應的值就是值最小的元素,判斷 

d 是否是未排序序列的第乙個元素,如果是,則不需要交換元素,如果不是,則需要交換

array[d] 

和 array[i]

。4. 此方法是不穩定排序演算法,可對陣列

排序就可以看出,排序完成後 

a1 和 

a4的相對位置改變了。

5. 此方法移動元素的次數比較少,但是不管序列中元素初始排列狀態如何,第 

i 趟排序都需要進行 

n - i 

次元素之間的比較,因此總的比較次數為

1 + 2 + 3 + 4 +5 + . . . + n - 1 = n(n-1)/2,時間複雜度是 

o(n^2).

3、選擇排序的時間複雜度

時間複雜度是 o(n^2)

4、**示例:

#include using namespace std;

void selectsort(int array, int n) }}

int main()

; int size = sizeof(array) / sizeof(int);

cout << "原始陣列是:\n";

for (int i = 0; i!= size; i++)

cout << array[i] << " ";

cout << endl;

selectsort(array, size);

cout << "select sort的結果是:\n";

for (int i = 0; i!=size; ++i)

cout << endl;

system("pause");

return 0;

}

執行結果:

C 排序 1 選擇排序

排序方法分為以下幾種,我將在接下來的幾篇blog中,介紹每一種。首先是比較簡單的選擇排序中的直接選擇排序。時間按複雜度為o n 2 空間複雜度為o 1 是一種不穩定的排序方法。具體形式如下圖所示 第一次從9,1,4,6,2中選擇最小的,即1,將1與 a 0 9調換位置,確定了第乙個位置的資料元素 第...

選擇排序 C

選擇排序的時間複雜度為o n n 空間複雜度為o n 邏輯分析 1 假設陣列中的最小數為a 0 然後比較陣列中其他數與a 0 的大小,若a i 2 然後繼續將a 1 中存訪後面元素最小的,一直到排序完成。是不是很簡單,對,就這麼簡單。include includeusing namespace st...

c 選擇排序

每一趟從待排序的資料元素中選出最小 或最大 的乙個元素,順序放在已排好序的數列的最後,直到全部待排序的資料元素排完。選擇排序是穩定的排序方法。示例 初始關鍵字 49 38 65 97 76 13 27 49 第一趟排序後 13 38 65 97 76 49 27 49 第二趟排序後 13 27 65...