氣泡排序:兩兩比較相鄰記錄的關鍵碼,如果反序則交換,直到沒有反序記錄為止
①、將整個待排序的記錄序列分成有序區和無序區,初始時有序區為空,無序區包括所有待排序的記錄
②、對無序區從前向後依次將相鄰記錄的關鍵碼進行比較,若反序則交換,從而使得關鍵碼小的記錄向前移,關鍵碼大的向後移(像水中的氣泡,體積大的先浮起來)
③、重複執行②。直到無序區中沒有反序的記錄
初始鍵值序列 [50 13 55 97 27 38 49 65]
一輪排序結果 [13 50 55 27 38 49 65] 97
二輪排序結果 [13 50 27 38 49] 55 65 97
三輪排序結果 [13 27 38 49] 50 55 65 97
四輪排序結果 13 27 38 49 50 55 65 97
①、在一輪氣泡排序中,若有多個記錄位於最終位,應該如何記錄
為此,設定變數exchange記錄每次元素交換的位置,則一輪排序後,exchange記錄的一定是這輪排序中 元素最後一次交換的位置,從此位置之後的所有元素都是已經有序的了
演算法if(args[r]>args[r+1])
②、如何確定氣泡排序範圍,使得已經位於最終位置的元素不參與下一輪排序
設定變數bound記錄的是無序區的最後乙個元素的索引,則每一輪排序的範圍是args[0]~~~args[bound]
演算法:for(j=0;j
<=bound-1;j++)
}
③、如何判別氣泡排序結束
判別結束條件應該是 在一輪排序過程中沒有進行元素的交換,那麼說明排序完成了。因此,在每一輪排序之前設定exchange=0,在這一輪的排序中,只要有元素的交換,那麼exchange的是一定大於0。
#include
void bubblesort(int *arg, int length);
void printarray(int *arg, int length);
void bubblesort(int *args, int length)
}
printf("%d:", ++count);//第幾輪
printarray(args,length);//列印一輪後的結果
}}void printarray(int *args, int length)
printf("]\n");
}int main(void);
bubblesort(args, 8);
return0;}
***********output**********
[50,13,55,97,27,38,49,65,]
1:[13,50,55,27,38,49,65,97,]
2:[13,50,27,38,49,55,65,97,]
3:[13,27,38,49,50,55,65,97,]
4:[13,27,38,49,50,55,65,97,]
請按任意鍵繼續. . .
C語言 氣泡排序
氣泡排序 兩兩比較相鄰記錄的關鍵碼,如果反序則交換,直到沒有反序記錄為止 將整個待排序的記錄序列分成有序區和無序區,初始時有序區為空,無序區包括所有待排序的記錄 對無序區從前向後依次將相鄰記錄的關鍵碼進行比較,若反序則交換,從而使得關鍵碼小的記錄向前移,關鍵碼大的向後移 像水中的氣泡,體積大的先浮起...
氣泡排序 C語言
c語言是比較簡單基礎的排序方式,排序效率並不高,但是很穩定。通過rand隨機生產10個小於20的數來測試排序。氣泡排序 include include include void bubblesortbetter int a,int n 改進 if flag 0 break void bubbleso...
C語言 氣泡排序
直接看 吧 include void bubblesort int r,int len if exchange 如果沒有發生交換,提前終止演算法 return int main bubblesort aa,10 for int i 0 i 10 i printf d aa i printf n re...