演算法提高 選擇排序
時間限制:1.0s 記憶體限制:256.0mb
提交此題
選擇排序
問題描述
排序,顧名思義,是將若干個元素按其大小關係排出乙個順序。形式化描述如下:有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行,每行輸出第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
資料規模和約定
n<=100
整數元素在int範圍內
簡單不解釋
#include
#include
using
namespace
std;
int num[120];
int n;
void fun(int k)
}int temp=num[k];num[k]=num[mini];
num[mini]=temp;
printf("swap(a[%d], a[%d]):",k,mini);
for (int i=0;icout
<" ";
cout
<1);
}int main()
fun(0);
return
0;}
演算法提高 選擇排序
演算法提高 選擇排序 時間限制 1.0s 記憶體限制 256.0mb 選擇排序 問題描述 排序,顧名思義,是將若干個元素按其大小關係排出乙個順序。形式化描述如下 有n個元素a 1 a 2 a n 從小到大排序就是將它們排成乙個新順序a i 1 輸入格式 第一行乙個正整數n,表示元素個數 第二行為n個...
演算法提高 選擇排序
選擇排序 問題描述 排序,顧名思義,是將若干個元素按其大小關係排出乙個順序。形式化描述如下 有n個元素a 1 a 2 a n 從小到大排序就是將它們排成乙個新順序a i 1 輸入格式 第一行乙個正整數n,表示元素個數 第二行為n個整數,以空格隔開 輸出格式 共n行,每行輸出第n步選擇時交換哪兩個位置...
演算法提高 選擇排序
題目鏈結 選擇排序 問題描述 排序,顧名思義,是將若干個元素按其大小關係排出乙個順序。形式化描述如下 有n個元素a 1 a 2 a n 從小到大排序就是將它們排成乙個新順序a i 1 include using namespace std void selectionsort int cur,int...