排序(C語言實現)

2021-08-09 14:33:11 字數 1187 閱讀 7626

1.基本原則:

比較兩兩相鄰記錄的關鍵字,使不滿足排序要求的記錄交換位置,直到n-1輪迴圈結束

2.操作順序(從小到大為例):

(1)從頭開始,比較 arr[i] 和 arr[i+1] ,如果第二個比第乙個小,交換

(2)指標向後移動,i=i+1,再次比較 arr[i] 和 arr[i+1] ,判斷是否需要交換

(3)迴圈操作以上步驟,直到指標指到最後乙個位置

3.氣泡排序優化:

如果在排序中間資料已經有序,但是普通的氣泡排序還會繼續迴圈,增加時間的消耗。所以需要在演算法中設定乙個簡單的標記位 flag 來判斷這輪迴圈是否交換了資料,開始時將flag 置為1,進入第一重迴圈將其置為0,如果有交換就把 flag 置為1,只有交換過資料(即 flag 置為1)才會繼續進入下一輪迴圈,否則排序結束

4.**實現:

void swap(int *a, int *b) //交換資料函式

void bubblesort(int arr,int len) //引數:(陣列,陣列長度)

} }}

1.基本原則:

從待排序的資料中選出最值,交換該資料與待排序序列的頭部資料,直到所有待排序的資料元素排序完畢

2.特點:

(1)可以將序列分為兩部分,剛開始整個序列都視為待排序序列,有序序列為空

(2)第一輪迴圈先把最小值預設為第0個,進入第二輪迴圈

(3)第二輪迴圈先找到最小值的下標,如果迴圈結束後min的值與開始不同,再進行交換

(4)不斷重複,直到資料排序結束

4.**實現:

void selectsort(int arr, int len)

if (min != i)

}}

1.基本思想:

分治法的典型應用,將已經有序的兩個子串行合併,在合併過程中對元素排序,從而得到乙個完整有序的序列,也就是保證小範圍的資料有序,再讓大範圍的資料有序

2.過程:

(1)n個記錄的序列,通常先視為n個小序列

(2)相鄰的兩個小序列兩兩比較再合併,就有n/2個序列,即每次序列的數量減半

(3)當序列數量為2時,進行歸併排序,可以使原始序列完全有序

c語言實現排序

給定n個 長整型範圍內的 整數,要求輸出從小到大排序後的結果。本題旨在測試各種不同的排序演算法在各種資料情況下的表現。各組測試資料特點如下 資料1 只有1個元素 資料2 11個不相同的整數,測試基本正確性 資料3 103個隨機整數 資料4 104個隨機整數 資料5 105個隨機整數 資料6 105個...

氣泡排序 c語言實現

氣泡排序 排序思想 1.對於乙個長度為n的陣列,進行n 1次迴圈 2.第一次次迴圈中,先將1和2元素比較,如果元素1比元素2大,則交換其位置,接著比較元素2和元素3,以此類推,最終最大的元素排在最後一位 3.接著第二次迴圈,要排序的元素個數減少乙個 最大的已經放在最後一位 重複2的過程 4.這樣,每...

C語言實現堆排序

一 堆排序的原理。堆排序是利用堆的性質進行的一種選擇排序。堆實際上是一顆完全二叉樹,其中任何一非葉節點滿足性質 key i key 2i 1 key i key 2i 或 key i key 2i 1 key i key 2i 任何一非葉節點的關鍵字不大於或者不小於其左右孩子。二 堆排序的思想。利用...