亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

深入C中常用的三種排序方法總結以及探討分析

2020-01-26 16:16:57
字體:
來源:轉載
供稿:網友
    排序是程序設計中非常重要的內容,它的功能是將一組無序的的數據,排列成有序的數據序列,經過排列后的數據,要么是從大到小排列,要么是從小到大排列。一般也只有這兩種情況。

    例如我們統計班級學生的成績,那么一般是按照學號來進行統計,原來成績是無序排列的,這樣的話非常不適合于我們對成績的查詢,那么一般我們進行成績查詢之前,先進行排序,如按照高分到低分的排序,這樣可以很快地查出本班的最高分和最低分,和成績比較靠前或靠后的學生。
排序有很多種方法,常用的有三種:冒泡排序、選擇排序、插入排序等,下面我們就對這三種方法做一下分析和比較,以便大家能夠更好的理解和應用。

一、冒泡排序

    1、冒泡排序的基本思想:對于n個數進行排序(現假定是從大到小排序,以下均按此進行),將相鄰兩個數依次比較,將大數調在前頭:也就是說第一個數和第二個數比較,大數放前,小數放后,第二個和第三個進行比較,大數放前、小數放后,然后依次類推。。。經過第一輪比較以后,我們找到一個最小數在最下面(沉底)。然后進行下一輪比較,最后一個數就不用再參加比較了,所以本輪就可以少比較一次。
很顯然,需要用雙重循環來設計這個問題,外層循環控制進行的輪數,內層循環控制每輪比較的次數,那么到底需要多少輪、每輪需要多少次,我們通過一個實例看一下:

2、排序過程舉例:

外循環
1輪
2輪
3輪
4輪
內循環
5個數比較4次
4個數比較3次
3個數比較2次
2個數比較1次
7
5
8
6
9
 
1次
2次
3次
4次
1次
2次
3次
1 次
2次
1次
7
5
8
6
9
7
8
5
6
9
7
8
6
5
9
7
8
6
9
5
8
7
6
9
5
8
7
6
9
5
8
7
9
6
5
8
7
9
6
5
8
9
7
6
5
9
8
7
6
5
 
最小的數5沉底,其余4個數繼續比較
次小數6沉底,其余3個數
7沉底,其余2個數比較
最后兩個數一次比較

    那么通過這個排序過程,我們了解了怎樣去進行排序,那么到底誰是氣泡呢,我們可以從中找出答案,那么從大到小進行排序,較大的一些數就是氣泡。隨著排序的進行,氣泡逐步上升。

    從這個排序過種中,還可以看出,5個數實際經過4輪就可以了,實踐證明,n個數最多需要n-1輪排序就可以了。

    3、冒泡排序的程序如下:

復制代碼 代碼如下:

for(i=0;i<10;i++)
for(j=0;j<10-i;j++)
     if(a[j]<a[j+1])
   {t=a[j];a[j]=a[j+1];a[j+1]=t;}

在此程序段的上面加上輸入部分和在程序段加上排序后的輸出。
程序的改進:

   4、算法的改進:

從上面的排序的過程可以看出,如果一個已經排好序的一組數或者經過很少的輪數就可以排完這些數,但是循環還是要繼續進行,這樣設計出的程序浪費了大量的時間,所以對一這個算法我們可以重新設計。
 經過修改后的程如下:

復制代碼 代碼如下:

for(i=0;i<10&&!swap;i++)
{
swap=1;
for(j=0;j<10-I;j++)
     if(a[j]<a[j+1])
       {t=a[j];a[j]=a[j+1];a[j+1]=t;swap=0;}
}

二、選擇排序

    1、排序的基本思想:先從第一個數開始起,用第一個數和其它的數進行比較,如果比第一個數大就交換位置,否則不進行交換,這樣經過第一輪比較我們就能夠找出最大值放在第一位置,然后從第二個位置起再找次大數,這樣依次下去,就可以進行整個數的排序,實踐證明,n個數最多需要n-1輪排序就可以了。
        2、排序過程舉例:

外循環
1輪
2輪
3輪
4輪
內循環
5個數比較4次
4個數比較3次
3個數比較2次
2個數比較1次
7
5
8
6
9
 
1次
2次
3次
4次
1次
2次
3次
1 次
2次
1次
7
5
8
6
9
8
5
7
6
9
8
5
7
6
9
9
5
7
6
8
9
7
5
6
8
9
7
5
6
8
9
8
5
6
7
9
8
6
5
7
9
8
7
6
5
9
8
7
6
5
 
最大的數9找到,其余4個數找次大數
次大數8找到,其余3個數找
7找到,其余2個數找
最后兩個數一次比較

選擇排序較冒泡容易理解,程序編寫也要相對容易一些。
復制代碼 代碼如下:

for(i=0;i<10;i++)
for(j=i+1;j<10;j++)
     if(a[i]<a[j])
   {t=a[i];a[i]=a[j];a[j]=t;}

對于選擇排序,我們也可以看到一個問題,如第一輪排序中,我們要找的是9才是最大值,所以其它的交換完全沒有必要進行,其它各輪都存在這樣的情況,所以我們可以想辦法取消這種情況,也就是說我們真正找到的最大值的位置后再進行交換。
復制代碼 代碼如下:

for(i=0;i<10;i++)
{ p=i;
for(j=i+1;j<10;j++)
     if(a[p]<a[j])
       p=j;
    if(p!=i)
{t=a[i];a[i]=a[j];a[j]=t;}
}

這樣算法經過改進以后就較好地解決了這個問題。

三、插入排序

1、插入排序基本思想:(假定從大到小排序)依次從后面拿一個數和前面已經排好序的數進行比較,比較的過程是從已經排好序的數中最后一個數開始比較,如果比這個數,繼續往前面比較,直到找到比它大的數,然后就放在它的后面,如果一直沒有找到,肯定這個數已經比較到了第一個數,那就放到第一個數的前面。
那么一般情況下,對于采用插入排序法去排序的一組數,可以先選 取第一個數做為已經排好序的一組數。然后把第二個放到正確位置
2、程序的編寫如下:

復制代碼 代碼如下:

for(i=1;i<10;i++)//i從0開始或者1開始都可以。其它不變。
for(j=i;j>0;j--)
     if(a[j]<a[j-1])
   {t=a[j];a[j]=a[j-1];a[j-1]=t;}

對于這個程序也有需要修該的地方,以上程序的排序實際上也是基于交換思想進行排序,也可以進行真正意義上的排序,即:先把待排序的數取出來,然后找出應該插入的位置,找到后,將待插入位置后的數據統統后移,原待排數據已經取出放于臨時變量中。然后把這個數據插入到正確的空余位置就可以了。

那么對于基于交換的插入排序,沒有找到位置之前,也進行了交換,所以我們也可以進行程序的改進。那么此程序的改進,肯定不能進行減少交換次數,因為我們知道如果到找到位置再進行交換,那么肯定已經找亂了原來的排序結果,所以只能是找位置,騰位置、放元素這幾道手續。
復制代碼 代碼如下:

main()
{
int i,j,t,a[]={12,11,2,3,6,67,89,0,1,3};
   for(i=1;i<10;i++)
   {t=a[i];
j=i-1;
while(j>=0&&t>a[i])
     {a[j+1]=a[j];
      j--;
}
    a[j+1]=t;  
 for(i=0;i<10;i++)
   printf("%d ",a[i]);
   printf("/n");
}

以上是對幾種排序方法進行了探討,關于排序問題,是程序設計中的一項非常重要的內容,所以在《數據結構與算法》中作為一項重要的內容做了深入的講解,我們這在這里只做簡單的探討,以備C語言的初學者或正在學習C語言編程的愛好者使用。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91在线视频成人| 欧美高清激情视频| 国产精品国产三级国产aⅴ浪潮| 成人免费网站在线看| 久久影视电视剧免费网站| 国产精品h在线观看| 日本电影亚洲天堂| 少妇高潮久久久久久潘金莲| 尤物九九久久国产精品的分类| 国产精品久久综合av爱欲tv| 欧美大全免费观看电视剧大泉洋| 国产欧美一区二区| 亚洲欧美激情四射在线日| 亚洲成年人在线播放| 亚洲第一黄色网| 亚洲另类欧美自拍| 91美女福利视频高清| 国产精品中文在线| 怡红院精品视频| 久久久久久免费精品| 精品夜色国产国偷在线| 亚洲第一男人av| 亚洲精品久久久久中文字幕欢迎你| 精品国产精品三级精品av网址| 久久久久久久久久久免费精品| 国产日韩精品在线| 亚洲人成在线电影| 丝袜亚洲欧美日韩综合| 在线观看久久av| 日韩国产精品亚洲а∨天堂免| 亚洲男人的天堂网站| 伊人亚洲福利一区二区三区| 日韩激情av在线播放| 亚洲欧美一区二区三区在线| 奇米一区二区三区四区久久| 亚洲国产成人在线播放| 久久人人爽人人爽人人片av高请| 亚洲男人天堂九九视频| 亚洲国产成人久久综合| 在线a欧美视频| 久久视频免费观看| 色婷婷亚洲mv天堂mv在影片| 日韩美女视频在线观看| 国色天香2019中文字幕在线观看| 91亚洲va在线va天堂va国| 正在播放亚洲1区| 国产亚洲欧洲黄色| 成人精品一区二区三区电影免费| 91免费在线视频| 国产精品wwww| 国产精品爽黄69| 亚洲天堂久久av| 欧美影院成年免费版| 456国产精品| 久久久久久久久亚洲| 成人免费观看a| 日韩精品久久久久久久玫瑰园| 久久久精品国产一区二区| 日韩精品中文字幕在线| 欧美午夜视频一区二区| 欧洲亚洲在线视频| 国产精品爽爽ⅴa在线观看| 欧美自拍大量在线观看| 亚洲国产天堂久久国产91| 国产精品美女免费视频| 欧美丰满老妇厨房牲生活| 精品国产成人av| 欧美裸身视频免费观看| 97香蕉久久夜色精品国产| 97视频在线观看成人| 久久精品91久久久久久再现| 欧美日韩免费看| 亚洲最大福利视频网站| 555www成人网| 亚洲自拍偷拍一区| 在线播放日韩av| 国产精品日韩电影| 51久久精品夜色国产麻豆| 亚洲天堂日韩电影| 欧美日韩在线看| 欧美自拍视频在线| 亚洲人成网7777777国产| 欧美日韩国产综合新一区| 日韩美女视频在线观看| 91久久嫩草影院一区二区| 人人做人人澡人人爽欧美| 成人免费观看49www在线观看| 一夜七次郎国产精品亚洲| 欧美视频一区二区三区…| 亚洲伊人久久综合| 日韩成人在线视频| 91精品国产99久久久久久| 欧美一区二区三区……| 久久亚洲精品毛片| 深夜福利91大全| 亚洲天堂男人的天堂| 久久久久久久久久久成人| 久久成人在线视频| 日韩中文字在线| 日韩免费观看高清| 色婷婷综合成人| 日韩中文在线不卡| 国产激情综合五月久久| 久久亚洲一区二区三区四区五区高| 日韩最新中文字幕电影免费看| 亚洲欧美变态国产另类| 欧美精品亚州精品| 日韩中文字幕视频| 成人免费视频97| 国产国语刺激对白av不卡| 国产精品美女av| 久久成人亚洲精品| 中文字幕亚洲欧美日韩高清| 26uuu日韩精品一区二区| 中文字幕欧美在线| 国产精品久久久久久久久久久久久久| 国产伊人精品在线| 欧美一性一乱一交一视频| 日韩欧美亚洲国产一区| 亚洲自拍在线观看| 欧美性猛交xxxx久久久| 51色欧美片视频在线观看| 午夜精品一区二区三区av| 国产在线一区二区三区| 国a精品视频大全| 亚洲男人天堂2024| 欧美日韩在线观看视频| 国产99视频精品免视看7| 国模吧一区二区三区| 亚洲成人中文字幕| 国产美女主播一区| 亚洲女成人图区| 亚洲精品在线视频| 红桃视频成人在线观看| 亚洲人成人99网站| 91夜夜揉人人捏人人添红杏| 永久免费看mv网站入口亚洲| 国产成人黄色av| 中文字幕在线精品| 日韩视频欧美视频| 日韩免费在线看| 成人h视频在线观看播放| 亚洲精品国产欧美| 成人激情视频免费在线| 日韩精品免费一线在线观看| 国产在线观看精品一区二区三区| 亚洲欧美国产精品va在线观看| 日本一区二区在线播放| 久久国产一区二区三区| 高清视频欧美一级| 日韩最新在线视频| 国产热re99久久6国产精品| www.久久久久久.com| 国产精品免费网站| 午夜精品久久久久久久99热| 日韩最新在线视频| 5252色成人免费视频| 亚洲日韩第一页| 国产aaa精品| 国产精品天天狠天天看| 国产精品久久久久91| 国产精彩精品视频| 国产精品美女999| 欧美日韩国产精品一区二区三区四区|