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

首頁 > 學院 > 開發設計 > 正文

C語言數組排序小結

2019-11-17 05:20:17
字體:
來源:轉載
供稿:網友

  很多朋友是以譚浩強老師編的《c語言教程》作為學習c語言的入門教程的。書中涉及排序問題一般都以“冒泡法”和“選擇法”實現。為了擴大視野,增加學習編程的愛好,我參閱了有關書籍,整理了幾種排序法,寫出來同大家共勉。(高手們不要笑,這篇文章是寫給出學者的,而且我自己也是只菜鳥,雖然內容陳舊,但值得初學者一看)。
讓我們先定義一個整型數組a[n],下面用五種方法對其從小到大排序。
(1)“冒泡法”
冒泡法大家都較熟悉。其原理為從a[0]開始,依次將其和后面的元素比較,若a[0]>a[i],則交換它們,一直比較到a[n]。同理對a[1],a[2],...a[n-1]處理,即完成排序。下面列出其代碼:

void bubble(int *a,int n) /*定義兩個參數:數組首地址與數組大小*/
{
int i,j,temp;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++) /*注重循環的上下限*/
if(a[i]>a[j]) {
temp=a[i];
a[i]=a[j];
a[j]=temp;
}

c語言數組排序小結(for beginner)
很多朋友是以譚浩強老師編的《c語言教程》作為學習c語言的入門教程的。書中涉及排序問題一般都以“冒泡法”和“選擇法”實現。為了擴大視野,增加學習編程的愛好,我參閱了有關書籍,整理了幾種排序法,寫出來同大家共勉。(高手們不要笑,這篇文章是寫給出學者的,而且我自己也是只菜鳥,雖然內容陳舊,但值得初學者一看)。
讓我們先定義一個整型數組a[n],下面用五種方法對其從小到大排序。
(1)“冒泡法”
冒泡法大家都較熟悉。其原理為從a[0]開始,依次將其和后面的元素比較,若a[0]>a[i],則交換它們,一直比較到a[n]。同理對a[1],a[2],...a[n-1]處理,即完成排序。下面列出其代碼:

void bubble(int *a,int n) /*定義兩個參數:數組首地址與數組大小*/
{
int i,j,temp;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++) /*注重循環的上下限*/
if(a[i]>a[j]) {
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}

冒泡法原理簡單,但其缺點是交換次數多,效率低。
下面介紹一種源自冒泡法但更有效率的方法“選擇法”。

(2)“選擇法”
選擇法循環過程與冒泡法一致,它還定義了記號k=i,然后依次把a[k]同后面元素比較,若a[k]>a[j],則使k=j.最后看看k=i是否還成立,不成立則交換a[k],a[i],這樣就比冒泡法省下許多無用的交換,提高了效率。

void choise(int *a,int n)
{
int i,j,k,temp;
for(i=0;i<n-1;i++) {
k=i; /*給記號賦值*/
for(j=i+1;j<n;j++)
if(a[k]>a[j]) k=j; /*是k總是指向最小元素*/
if(i!=k) { /*當k!=i是才交換,否則a[i]即為最小*/
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
}

選擇法比冒泡法效率更高,但說到高效率,非“快速法”莫屬,現在就讓我們來了解它。

(3)“快速法”
快速法定義了三個參數,(數組首地址*a,要排序數組起始元素下標i,要排序數組結束元素下標j). 它首先選一個數組元素(一般為a[(i+j)/2],即中間元素)作為參照,把比它小的元素放到它的左邊,比它大的放在右邊。然后運用遞歸,在將它左,右兩個子數組排序,最后完成整個數組的排序。下面分析其代碼:

void quick(int *a,int i,int j)
{
int m,n,temp;
int k;
m=i;
n=j;
k=a[(i+j)/2]; /*選取的參照*/
do {
while(a[m]<k&&m<j) m++; /* 從左到右找比k大的元素*/
while(a[
  n]>k&&n>i) n--; /* 從右到左找比k小的元素*/
if(m<=n) { /*若找到且滿足條件,則交換*/
temp=a[m];
a[m]=a[n];
a[n]=temp;
m++;
n--;
}
}while(m<=n);
if(m<j) quick(a,m,j); /*運用遞歸*/
if(n>i) quick(a,i,n);
}

(4)“插入法”
插入法是一種比較直觀的排序方法。它首先把數組頭兩個元素排好序,再依次把后面的元素插入適當的位置。把數組元素插完也就完成了排序。

void insert(int *a,int n)
{
int i,j,temp;
for(i=1;i<n;i++) {
temp=a[i]; /*temp為要插入的元素*/
j=i-1;
while(j>=0&&temp<a[j]) { /*從a[i-1]開始找比a[i]小的數,同時把數組元素向后移*/
a[j+1]=a[j];
j--;
}
a[j+1]=temp; /*插入*/
}
}

(5)“shell法”
shell法是一個叫 shell 的美國人與1969年發明的。它首先把相距k(k>=1)的那幾個元素排好序,再縮小k值(一般取其一半),再排序,直到k=1時完成排序。下面讓我們來分析其代碼:

void shell(int *a,int n)
{
int i,j,k,x;
k=n/2; /*間距值*/
while(k>=1) {
for(i=k;i<n;i++) {
x=a[i];
j=i-k;
while(j>=0&&x<a[j]) {
a[j+k]=a[j];
j-=k;
}
a[j+k]=x;
}
k/=2; /*縮小間距值*/
}
}

上面我們已經對幾種排序法作了介紹,現在讓我們寫個主函數檢驗一下。

#include<stdio.h>

/*別偷懶,下面的"..."代表函數體,自己加上去哦!*/
void bubble(int *a,int n)
{
...
}
void choise(int *a,int n)
{
...
}
void quick(int *a,int i,int j)
{
...
}
void insert(int *a,int n)
{
...
}
void shell(int *a,int n)
{
...
}

/*為了打印方便,我們寫一個PRint吧。*/
void print(int *a,int n)
{
int i;
for(i=0;i<n;i++)
printf("%5d",a[i]);
printf("/n");
}

main()
{ /*為了公平,我們給每個函數定義一個相同數組*/
int a1[]={13,0,5,8,1,7,21,50,9,2};
int a2[]={13,0,5,8,1,7,21,50,9,2};
int

  a3[]={13,0,5,8,1,7,21,50,9,2};
int a4[]={13,0,5,8,1,7,21,50,9,2};
int a5[]={13,0,5,8,1,7,21,50,9,2};

printf("the original list:");
print(a1,10);
printf("according to bubble:");
bubble(a1,10);
print(a1,10);
printf("according to choise:");
choise(a2,10);
print(a2,10);
printf("according to quick:");
quick(a3,0,9);
print(a3,10);
printf("according to insert:");
insert(a4,10);
print(a4,10);
printf("according to shell:");
shell(a5,10);
print(a5,10);
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美一区二区三区在线| 7777精品视频| 亚洲free嫩bbb| 欧美日韩国内自拍| 色噜噜狠狠狠综合曰曰曰| 91久久久国产精品| 欧美性做爰毛片| 精品香蕉在线观看视频一| 亚洲天堂成人在线视频| 国产亚洲精品美女久久久久| 97超碰国产精品女人人人爽| 欧美成人精品影院| 欧美最近摘花xxxx摘花| 亚洲一区av在线播放| 成人国产在线激情| 久热国产精品视频| 日韩亚洲成人av在线| 日韩中文字幕在线免费观看| 日韩福利伦理影院免费| 色哟哟亚洲精品一区二区| 日韩成人网免费视频| 91高潮在线观看| 国产成人aa精品一区在线播放| 91av视频在线观看| 久久国产精品偷| 日韩不卡中文字幕| 欧美在线一级va免费观看| 亚洲国产天堂网精品网站| 久久久99久久精品女同性| 国产在线精品播放| 精品国产鲁一鲁一区二区张丽| 日韩精品免费视频| 欧美日韩亚洲一区二区三区| 懂色av影视一区二区三区| 秋霞av国产精品一区| 91精品国产综合久久香蕉的用户体验| 国产精品免费在线免费| 亚洲精品中文字幕女同| 中文在线不卡视频| 国产精品嫩草影院久久久| 亚洲欧美精品中文字幕在线| 国产综合在线视频| 亚洲最新av在线| 亚洲毛片一区二区| 91免费视频网站| 久久亚洲精品小早川怜子66| 国产精品欧美久久久| 97久久精品国产| 精品美女永久免费视频| 久久久久久久久久久成人| 久久99久久99精品中文字幕| 亚洲精品色婷婷福利天堂| 亚洲第一偷拍网| 秋霞成人午夜鲁丝一区二区三区| 亚洲电影成人av99爱色| 久久香蕉国产线看观看av| 亚洲最大激情中文字幕| 久久精品欧美视频| 米奇精品一区二区三区在线观看| 国产精品极品美女在线观看免费| 成人写真福利网| 亚洲人成网站999久久久综合| 久久久国产精品亚洲一区| 伊人久久男人天堂| 日韩成人av网| 欧美大肥婆大肥bbbbb| 一区二区成人av| 亚洲免费av电影| 亚洲免费成人av电影| 国产成人午夜视频网址| 69影院欧美专区视频| 国产69精品久久久久9999| 中文字幕日韩精品在线观看| 激情成人中文字幕| 国产精品国模在线| 亚洲品质视频自拍网| 亚洲精品久久久久国产| 在线日韩精品视频| 粉嫩av一区二区三区免费野| 琪琪亚洲精品午夜在线| 精品女厕一区二区三区| 亚洲一区亚洲二区亚洲三区| 中文字幕日韩欧美在线视频| 日韩av在线免费观看| 色妞在线综合亚洲欧美| 日韩亚洲国产中文字幕| 性欧美xxxx视频在线观看| 欧美日韩亚洲一区二区三区| 国产精品久久婷婷六月丁香| 欧美高清视频一区二区| 98视频在线噜噜噜国产| 国产精品xxx视频| 亚洲欧洲美洲在线综合| 欧美精品一区三区| 成人精品一区二区三区电影黑人| 亚洲国产古装精品网站| 欧美亚洲视频一区二区| 国产综合久久久久| 久久精品国产亚洲精品2020| 欧美激情久久久久| 95av在线视频| 97热精品视频官网| 亚洲欧美在线看| 亚洲综合中文字幕在线观看| 亚洲黄色av网站| 中文字幕精品在线| 日韩欧美精品网站| 国产精品福利久久久| 91久久夜色精品国产网站| 国内精品一区二区三区四区| 亚洲性线免费观看视频成熟| 欧美日韩国产区| 最新日韩中文字幕| 国产福利精品视频| 伊人伊人伊人久久| 久久精品国产免费观看| 91精品国产一区| 亚州av一区二区| 91高清免费在线观看| 亚洲午夜未删减在线观看| 国产精品91在线| 欧美又大又粗又长| 亚洲第一精品夜夜躁人人躁| **欧美日韩vr在线| 少妇高潮久久77777| 日韩欧美在线免费| 国产精品免费视频xxxx| 久久久久久久成人| 欧美一级视频一区二区| 国产精品一区二区三区久久久| 国产男女猛烈无遮挡91| 欧美亚洲国产成人精品| 日韩精品免费看| 亚洲人成免费电影| 亚洲福利在线看| 国产精品欧美久久久| 国产乱人伦真实精品视频| 日本精品性网站在线观看| 国产精品日韩av| 在线视频欧美日韩精品| 在线观看日韩av| 日韩美女在线播放| 欧美精品福利在线| 国产精品久久久久久久久久免费| 国产91久久婷婷一区二区| 日韩av中文字幕在线播放| 欧洲精品在线视频| 亚洲免费影视第一页| 欧美日韩国产影院| 亚洲精品电影久久久| 伊人成人开心激情综合网| 亚洲国产天堂久久国产91| 国产日韩精品视频| 国产精品入口免费视频一| 日本精品视频在线播放| 亚洲国产精品一区二区三区| 久久精品久久久久电影| 亚洲国产精品字幕| 日韩视频免费中文字幕| 热久久免费视频精品| 日韩一区二区三区xxxx| 美乳少妇欧美精品| 韩国一区二区电影| 欧美另类精品xxxx孕妇|