linux用冒泡排序程序,利用双向走动法改进冒泡排序算法C语言源代码[黑盟核心成员]...
傳統的冒泡排序法是這樣操作:從前往后,依次比較兩個相鄰的元素,如果逆序則交換這兩個元素值,然后繼續往后操作;到了數據尾部時,就找出了一個最大值(或最小值)。然后重復上面的操作n-1次(n為元素個數)。
相關的改進辦法:按照上面的辦法來操作的話,第一次掃描把最大數(或最小數)放到最后面的位置,第二次掃描時其實只需要掃描到倒數第二個位置就可以了,因為最后一個位置已經不需要判斷了,以后的操作都是類似的。這樣可以減小程序運行時間。
雙向走動法(以升序排序為例):首先,從前往后掃描,如果相鄰兩個元素前面的比后面的大,則交換,繼續往后;到尾部以后,再往回走,如果后面的元素比前面的小,則交換,繼續往前走;到了頭以后,再往后走。為了減少走動次數,我們用變量start表示頭,用變量end表示尾。每找到一個剩余數據中的最大數,就讓變量end減1,每找到一個剩余數據中的最小數,就讓變量start加1。循環條件為start<=end。
代碼如下:
#i nclude #i nclude
void maopao(int source[],int n)
{
int start=0,end=n-1;
int i;
while(start<=end)/*如果還有元素沒有確定其位置*/
{
for(i=start;iif(source[i]>source[i+1])
{
int t;
t=source[i];
source[i]=source[i+1];
source[i+1]=t;
}
end--;/*找到最大數*/
for(i=end;i>start;i--)/*尋找剩余元素的最小元素*/
if(source[i]{
int t;
t=source[i];
source[i]=source[i-1];
source[i-1]=t;
}
start++;/*找到一個最小數*/
}
}
void output(int data[],int n)
{
int i;
for(i=0;i{
if(i%10==0)
printf("\n");
printf("%4d",data[i]);
}
}
int check(int data[],int n)
{/*檢查結果數據是否已升序排列*/
int i;
for(i=0;iif(data[i]>data[i+1])
return 0;
return 1;
}
void main()
{
int data[500];
int i;
srand(time(NULL));
for(i=0;i<500;i++)
data[i]=random(500);
printf("\nThe original data is:\n");
output(data,500);
maopao(data,500);
printf("\nAfter sort:\n");
output(data,500);
printf("\n");
if(check(data,500)==1)
printf("\nRight.");
else
printf("\nWrong.");
}
總結
以上是生活随笔為你收集整理的linux用冒泡排序程序,利用双向走动法改进冒泡排序算法C语言源代码[黑盟核心成员]...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx linux源码编译安装,Li
- 下一篇: oracle linux 配置本地yum