選擇排序 (C ) 排序演算法 (遞迴實現)

2021-10-08 18:20:07 字數 1613 閱讀 5178

排序,顧名思義,是將若干個元素按其大小關係排出乙個順序。形式化描述如下:有n個元素a[1],a[2],…,a[n],從小到大排序就是將它們排成乙個新順序a[i[1]]< a[i[2]]< …< a[i[n]]

i[k]為這個新順序。

選擇排序的思想極其簡單,每一步都把乙個最小元素放到前面,如果有多個相等的最小元素,選擇排位較考前的放到當前頭部。還是那個例子::

第一步將1放到開頭(第乙個位置),也就是交換3和1,即swap(a[0],a[1])得到

第二步將2放到第二個位置,也就是交換3和2,即swap(a[1],a[4])得到

第三步將3放到第三個位置,也就是交換5和3,即swap(a[2],a[4])得到

第四步將4放到第四個位置,也就是交換4和4,即swap(a[3],a[3])得到

第五步將5放到第五個位置,也就是交換5和5,即swap(a[4],a[4])得到

輸入n個整數,輸出選擇排序的全過程。

要求使用遞迴實現。

輸入第一行乙個正整數n,表示元素個數

第二行為n個整數,以空格隔開,每組資料由兩行組成,第一行是n和x,第二行是已經有序的n個數的數列。n和x同時為0標示輸入資料的結束,本行不做處理。

輸出共n行,每行輸出第n步選擇時交換哪兩個位置的下標,以及交換得到的序列,格式:

swap(a[i],a[j]):a[0] … a[n-1]

i和j為所交換元素的下標,下標從0開始,最初元素順序按輸入順序。另外請保證i< =j

a[0]…a[n-1]為交換後的序列,元素間以乙個空格隔開

樣例輸入

5

4 3 1 1 2

樣例輸出
swap(a[0], a[2]):1 3 4 1 2

swap(a[1], a[3]):1 1 4 3 2

swap(a[2], a[4]):1 1 2 3 4

swap(a[3], a[3]):1 1 2 3 4

swap(a[4], a[4]):1 1 2 3 4

這是一道難度為**的排序演算法題,考察的是選擇排序的演算法,

對於選擇排序,我們要知道,是第一次從待排序的資料元素中選出最小或最大的乙個元素,存放在序列的起始位置,然後再從剩餘的未排序元素中尋找到最小或最大元素,然後放到已排序的序列的末尾,以此類推,知道全部待排序的資料元素的個數為零。

有如下排序函式部分**

void select_sort(int a, int n) 

}swap(a[i], a[k]);

}}

#includeusing namespace std;

//選擇排序:從無序區找乙個最小值和無序區第乙個元素置換

void select_sort(int a, int n)

}swap(a[i], a[k]);

cout << "swap(a[" << i << "], a[" << k << "]):";

for (int j = 0; j < n; j++)

cout << endl;

}}int main()

1.選擇排序是一種直觀的排序演算法,不穩定。

2.輸出時記得多測試

3. 輸出格式要正確

C 實現排序演算法之選擇排序

c 實現排序演算法之選擇排序 選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理是 第一次從待排序的資料元素中選出最小 或最大 的乙個元素,存放在序列的起始位置,然後再從剩餘的未排序元素中尋找到最小 大 元素,然後放到已排序的序列的末尾。以此類推,直到全部待排序的資料元...

C 實現選擇排序演算法

選擇排序演算法的基本思想 每一輪找到最小 公升序 的元素放在當前序列的最前面。特點 先找到最小元素,記錄下標,最後交換。時間複雜度 o n 2 以下為實現 include using namespace std void sort int arr,int length 傳入陣列首位址和陣列長度 if...

演算法 選擇排序 C 實現

選擇排序演算法的基本思想 每一輪找到最小 公升序 的元素放在當前序列的最前面。特點 先找到最小元素,記錄下標,最後交換。時間複雜度 o n 2 以下為實現 include define max 1000 using namespace std void selectionsort int t,int...