1、選擇排序的核心思想是:
1)第1趟排序是從第1個元素
後面的
n - 1
個元素中選擇乙個值最小於第1
個元素的元素與第
1個元素交換位置;
2)第22、選擇排序的特點:趟排序是從第
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
,排序結束。每一趟排序從序列中未排好序的那些元素中選擇乙個值最小的元素,然後將其與這些未排好序的元素的第乙個元素交換位置。
1. 演算法完成需要3、選擇排序的時間複雜度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).
時間複雜度是 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...