題目:
將NN個(gè)整數(shù)按從小到大排序的冒泡排序法是這樣工作的:從頭到尾比較相鄰兩個(gè)元素做鹰,如果前面的元素大于其緊隨的后面元素闸婴,則交換它們。通過(guò)一遍掃描站故,則最后一個(gè)元素必定是最大的元素区宇。然后用同樣的方法對(duì)前N-1N?1個(gè)元素進(jìn)行第二遍掃描娃殖。依此類推,最后只需處理兩個(gè)元素议谷,就完成了對(duì)NN個(gè)數(shù)的排序炉爆。
本題要求對(duì)任意給定的KK(<N<N),輸出掃描完第KK遍后的中間結(jié)果數(shù)列柿隙。
輸入格式:
輸入在第1行中給出NN和KK(1\le K<N\le 1001≤K<N≤100)叶洞,在第2行中給出NN個(gè)待排序的整數(shù)鲫凶,數(shù)字間以空格分隔禀崖。
輸出格式:
在一行中輸出冒泡排序法掃描完第KK遍后的中間結(jié)果數(shù)列,數(shù)字間以空格分隔螟炫,但末尾不得有多余空格波附。
輸入樣例:
6 2
2 3 5 1 6 4
輸出樣例:
2 1 3 4 5 6
思路:先寫(xiě)一個(gè)冒泡排序, 然后按題目要求控制遍歷次數(shù)昼钻,主要是要懂冒泡排序的原理與實(shí)現(xiàn)掸屡。
C語(yǔ)言代碼:
#include <stdio.h>
#define SIZE 100
void bubble_sort(int arr[], int len, int n);
int main(void)
{
// 讀入
int size, n;
scanf("%d %d", &size, &n);
int a[SIZE];
int i;
for (i=0; i<size; i++){
scanf("%d", &a[i]);
}
bubble_sort(a, size, n);
for (i=0; i<size; i++){
printf("%d%c", a[i], i==size-1?'\n':' '); // 最后一個(gè)數(shù)后面沒(méi)有空格
}
return 0;
}
// 冒泡函數(shù),n控制遍歷次數(shù)
void bubble_sort(int arr[], int len, int n)
{
int i, j;
int temp;
for (i=len; i>len-n; i--){ // 不減n就可以完成排序了
for (j=0; j<i-1; j++){
if (arr[j] > arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}