7-2?冒泡法排序(20?分)將N個(gè)整數(shù)按從小到大排序的冒泡排序法是這樣工作的:從頭到尾比較相鄰兩個(gè)元素,如果前面的元素大于其緊隨的后面元素,則交換它們。通過(guò)一遍掃描,則最后一個(gè)元素必定是最大的元素。然后用同樣的方法對(duì)前N?1個(gè)元素進(jìn)行第二遍掃描。依此類推,最后只需處理兩個(gè)元素,就完成了對(duì)N個(gè)數(shù)的排序。本題要求對(duì)任意給定的K(<N),輸出掃描完第K遍后的中間結(jié)果數(shù)列。輸入格式:輸入在第1行中給出N和K(1≤K<N≤100),在第2行中給出N個(gè)待排序的整數(shù),數(shù)字間以空格分隔。輸出格式:在一行中輸出冒泡排序法掃描完第K遍后的中間結(jié)果數(shù)列,數(shù)字間以空格分隔,但末尾不得有多余空格。輸入樣例:6 22 3 5 1 6 4輸出樣例:2 1 3 4 5 6#include<stdio.h>int main(){ int i,j,N,K; ? ? ? ? ? ? ? ? ? ? int arr[100]; scanf("%d",&N,&K); for(i=0;i<N;i++) ? ? ? ? ? ?// 這是所求N-1遍的掃描如果相求K遍就將N換K { scanf("%d",&arr[i]); } for(i=N-2;i>=0;i--) { for(j=0;j<=i;j++) ? ? ? ? // 相鄰兩個(gè)數(shù)的比較 { if(arr[j]>arr[j+1]) ? // 具體操作 { int temp; temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } for(i=K;i<N-K-2;i--) ? ? ? ?// 對(duì)中間數(shù)的掃描 { for(j=0;j<=i;j++) { if(arr[j+1]>arr[j+2]) { ? int swap; ? swap=arr[j+1]; ? arr[j+1]=arr[j+2]; ? arr[j+2]=swap; } } } for(i=0;i<N;i++) { printf("%d\t",arr[i]); } return 0;}
我的中間數(shù)掃描哪里有問(wèn)題
名不見(jiàn)經(jīng)傳的小菜鳥(niǎo)
2017-11-13 20:30:29