藍橋杯 ADV 131演算法提高 選擇排序

2021-07-15 10:12:25 字數 1252 閱讀 7756

問題描述

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

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行,每行輸出第n步選擇時交換哪兩個位置的下標,以及交換得到的序列,格式:

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

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

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

樣例輸入

54 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

資料規模和約定

n<=100

整數元素在int範圍內

#include using namespace std;

int main()

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

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

printf("swap(a[%d], a[%d]):", i, k);

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

cout << endl;

}delete a;

return 0;

}

藍橋杯 ADV 20 演算法提高 交換Easy

問題描述 給定n個整數組成的序列,每次交換當前第x個與第y個整數,要求輸出最終的序列。輸入格式 第一行為序列的大小n 1 n 1000 和操作個數m 1 m 1000 第二行包含n個數字,表示初始序列。接下來m行,每行兩個整數x,y 1 x,y n 表示要交換的兩個整數。在一次交換中,如果x和y相等...

藍橋杯 ADV 208 演算法提高 矩陣相乘

問題描述 小明最近在為線性代數而頭疼,線性代數確實很抽象 也很無聊 可惜他的老師正在講這矩陣乘法這一段內容。當然,小明上課打瞌睡也沒問題,但線性代數的習題可是很可怕的。小明希望你來幫他完成這個任務。現在給你乙個ai行aj列的矩陣和乙個bi行bj列的矩陣,要你求出他們相乘的積 當然也是矩陣 輸入資料保...

藍橋杯 ADV 141 演算法提高 判斷名次

問題描述 某場比賽過後,你想要知道a e五個人的排名是什麼,於是要求他們每個人說了一句話。經典的開頭 得了第1名的人23,說了假話 得了第5名的人不好意思,也說了假話 為了使求解問題簡單,第3名同樣說了假話。奇數名次說假話 輸入格式 共5行,各行依次表示a e說的話。每行包含乙個形如 a 3 的名次...