壹、氣泡法(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 ");
}
算法特點:每壹遍從無序序列中取出第壹個數,插入有序序列的適當位置,直到插入最後壹遍才能確定元素的最終位置。也可以先通過循環(從前到後或從後到前)找到插入位置,然後將插入位置後的元素(按順序)逐個移動,最後完成插入。該算法的特點是尋找插入位置,同時完成元素的移動。因為元素的移動必須是從後向前的,所以可以將這兩種操作結合起來,提高算法的效率。您仍然可以按升序或降序排序。
這個應該對妳很有用,好好學習,理解它!祝妳好運!