日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux用冒泡排序程序,利用双向走动法改进冒泡排序算法C语言源代码[黑盟核心成员]...

發布時間:2024/9/15 linux 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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语言源代码[黑盟核心成员]...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。