當前位置:吉日网官网 - 傳統節日 - 設計壹個C語言程序,用壹維數組輸入n個整數,將n個整數按降序排列。

設計壹個C語言程序,用壹維數組輸入n個整數,將n個整數按降序排列。

我給大家展示壹下C語言的三種排序方法,這是我們老師總結的。看懂了自己寫這個程序!

壹、氣泡法(bubble method)

算法要求10個整數用冒泡法升序排序。

算法分析:如果有n個數,要比較n-1遍。相鄰元素的N-1成對比較應在1比較中進行,n-j成對比較應在J比較中進行。比較的順序是從開始到結束。比較後,最大值下沈到底部(更改到最後壹個元素位置),最大值下沈到升序,最小值下沈到降序。

算法源代碼:

# include & ltstdio.h & gt

主()

{

int a[10],I,j,t;

printf("請輸入10數字:");

/*輸入源數據*/

for(I = 0;我& lt10;i++)

scanf("%d ",& ampa[I]);

/*排序*/

for(j = 0;j & lt9;J++)/*外循環控制排序遍數,n行數為n-1遍*/

for(I = 0;我& lt9-j;I++)/*內循環每次行程的比較次數,第j次比較n-j次*/

if(a[I]& gt;A [I+1])/*比較相鄰元素,交換逆序*/

{ t = a[I];

a[I]= a[I+1];

a[I+1]= t;

}

/*輸出排序結果*/

printf("排序後的數字:");

for(I = 0;我& lt10;i++)

printf("%d ",a[I]);

printf(" \ n ");

}

算法特點:相鄰元素成對比較,壹個數的位置可以通過每遍下沈最大值來確定,確定元素位置的順序是從後向前,其他元素的相對位置可能有調整。您可以按升序或降序排序。

二、選擇方法

該算法要求10個整數按選擇方法降序排列。

算法分析:每遍選擇壹個最大值與亂序的第壹個數交換,n個數* * *選擇n-1遍。在第I遍中,我假設I是最大下標,然後將最大值與i+1比較到最後壹個數,找到最大下標。如果最大下標不是初始值,則將最大元素與下標為I的元素交換..

算法源代碼:

# include & ltstdio.h & gt

主()

{

int a[10],I,j,k,t,n = 10;

printf("請輸入10數字:");

for(I = 0;我& lt10;i++)

scanf("%d ",& ampa[I]);

for(I = 0;我& ltn-1;I++)/*外部循環控制通過,n-1通過*/

{

k = I;/*假設當前行程的第壹個數字是最大值,並記錄在k */

for(j = I+1;j & ltn;J++)/*從下壹個數字到最後壹個數字尋找最佳值*/

if(a[k]& lt;A [j])/*如果有*/

k = j;/*然後用k *標記

如果(k!= I)/*如果k不是I的初始值,說明後面找到了更大的數*/

{ t = a[k];a[k]= a[I];a[I]= t;}/*交換當前序列的最大值和第壹個數字*/

}

printf("排序後的數字:");

for(I = 0;我& lt10;i++)

printf("%d ",a[I]);

printf(" \ n ");

}

算法特點:每壹遍都是選擇壹個最大值來確定其在結果序列中的位置,從前到後確定元素的位置,每壹遍最多交換壹次,其他元素的相對位置不變。您可以按降序或升序排序。

三、插入法

算法要求10個整數用插入排序法降序排序。

算法分析:將序列分為有序序列和無序序列,從無序序列中取出元素值,依次插入有序序列的適當位置。最初,有序序列中只有第壹個數,其余n-1個數形成壹個無序序列,所以需要將N個數插入n-1次。若要在有序序列中查找插入位置,可以從有序序列的最後壹個數字向前查找,同時可以在找到插入點之前向後移動元素,以便為插入元素準備空間。

算法源代碼:

# include & ltstdio.h & gt

主()

{

int a[10],I,j,t;

printf("請輸入10數字:");

for(I = 0;我& lt10;i++)

scanf("%d ",& ampa[I]);

for(I = 1;我& lt10;I++)/*外循環控制遍數,n個數從第二個數開始到最後壹個* * *插入n-1次*/

{

t = a[I];/*臨時存儲要插入變量t中的數字*/

for(j = I-1;j & gt= 0 & amp& ampt & gta[j];J-)/*在有序序列中查找插入位置(下標0 ~ i-1) */

a[j+1]= a[j];/*如果找不到插入位置,則當前元素向後移動壹個位置*/

a[j+1]= t;/*找到插入位置並完成插入*/

}

printf("排序後的數字:");

for(I = 0;我& lt10;i++)

printf("%d ",a[I]);

printf(" \ n ");

}

算法特點:每壹遍從無序序列中取出第壹個數,插入有序序列的適當位置,直到插入最後壹遍才能確定元素的最終位置。也可以先通過循環(從前到後或從後到前)找到插入位置,然後將插入位置後的元素(按順序)逐個移動,最後完成插入。該算法的特點是尋找插入位置,同時完成元素的移動。因為元素的移動必須是從後向前的,所以可以將這兩種操作結合起來,提高算法的效率。您仍然可以按升序或降序排序。

這個應該對妳很有用,好好學習,理解它!祝妳好運!

  • 上一篇:西遊記手抄報圖片
  • 下一篇:請給我壹些簡單的英語情話?
  • copyright 2024吉日网官网