筆記 排序演算法總結

2022-02-23 02:51:19 字數 2530 閱讀 7872

最簡單的排序,其基本思想是:每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。

void insertsort(int* pdata,int

count)

pdata[ipos+1] =itemp;

} }

倒序(最糟情況)

第一輪:10,9,8,7->9,10,8,7(交換1次)(迴圈1次)

第二輪:9,10,8,7->8,9,10,7(交換1次)(迴圈2次)

第一輪:8,9,10,7->7,8,9,10(交換1次)(迴圈3次)

迴圈次數:6次 ;交換次數:3次

其他:

第一輪:8,10,7,9->8,10,7,9(交換0次)(迴圈1次)

第二輪:8,10,7,9->7,8,10,9(交換1次)(迴圈2次)

第一輪:7,8,10,9->7,8,9,10(交換1次)(迴圈1次)

迴圈次數:4次 ;交換次數:2次

二、氣泡排序

在氣泡排序的過程中,關鍵字較小的記錄好比水中的氣泡逐趟向上飄浮。過程:將第乙個關鍵字與第二個關鍵字進行比較,如果逆序,則交換,然後將第二個關鍵字與第三個關鍵字比較,依次直到最後,這樣最小的關鍵字就被排到了第乙個位置上;然後從第二個關鍵字開始重複進行先前的步驟。另外,判斷氣泡排序結束的條件是:在一趟排序過程中沒有進行過交換記錄的操作。

void bubblesort(int* pdata,int

count)

if(!exchange_flag) return

; }

} }

倒序(最糟情況)

第一輪:10,9,8,7->10,9,7,8->10,7,9,8->7,10,9,8(交換3次)

第二輪:7,10,9,8->7,10,8,9->7,8,10,9(交換2次)

第一輪:7,8,10,9->7,8,9,10(交換1次)

迴圈次數:6次 ;交換次數:6次

其他:

第一輪:8,10,7,9->8,10,7,9->8,7,10,9->7,8,10,9(交換2次)

第二輪:7,8,10,9->7,8,10,9->7,8,10,9(交換0次)

第一輪:7,8,10,9->7,8,9,10(交換1次)

迴圈次數:6次 ;交換次數:3次

三、選擇排序

基本思想:從資料中選擇最小的同第乙個值交換,在從省下的部分中 選擇最小的與第二個交換,這樣往復下去。

void selectsort(int* pdata,int

count)

} pdata[ipos] =pdata[i];

pdata[i] =itemp;

} }

倒序(最糟情況)

第一輪:10,9,8,7->(itemp=9)10,9,8,7->(itemp=8)10,9,8,7->(itemp=7)7,9,8,10(交換1次)

第二輪:7,9,8,10->7,9,8,10(itemp=8)->(itemp=8)7,8,9,10(交換1次)

第一輪:7,8,9,10->(itemp=9)7,8,9,10(交換0次)

迴圈次數:6次 ;交換次數:2次

其他:

第一輪:8,10,7,9->(itemp=8)8,10,7,9->(itemp=7)8,10,7,9->(itemp=7)7,10,8,9(交換1次)

第二輪:7,10,8,9->(itemp=8)7,10,8,9->(itemp=8)7,8,10,9(交換1次)

第一輪:7,8,10,9->(itemp=9)7,8,9,10(交換1次)

迴圈次數:6次 ;交換次數:3次

四、快速排序

首先我們選擇乙個中間值middle程式中我們使用陣列中間值,然後 把比它小的放在左邊,大的放在右邊(具體的實現是從兩邊找,找到一對後交換)。然後對兩邊分別使 用這個過程(最容易的方法——遞迴)。

void run(int* pdata,int left,int

right)

}while(i<=j);//

如果兩邊掃瞄的下標交錯,就停止(完成一次)

//當左邊部分有值(leftif(left

run(pdata,left,j);

//當右邊部分有值(right>i),遞迴右半邊

if(right>i)

run(pdata,i,right);

} void quicksort(int* pdata,int

count)

也稱為縮小增量排序,基本思想:先將整個待排序記錄序列分割成為若干子串行分別進行直接插入排序,待整個序列中的記錄基本有序時,再對全體記錄進行一次直接插入排序。

六、比較

linux sort 演算法 筆記 排序演算法總結

一 直接插入排序 最簡單的排序,其基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。void insertsort int pdata,intcount if exchange flag return 倒序 最糟情況 第一輪 10,...

快速排序演算法 總結筆記

首先選擇乙個關鍵值key,作為樞軸。一般會將陣列的首個元素選定為key,樞軸。為什麼說是樞軸?是因為待會我們要以這個key為界,把所有小於等於key值的陣列元素放置到key的左側 把所有大於等於key值的元素移到陣列的右側。key,充當了乙個臨界軸的作用,所以叫它樞軸並不為過。定義兩個變數,firs...

演算法導論 讀書筆記 排序演算法總結

排序演算法目錄 1.插入排序 2.歸併排序 3.堆排序 4.快速排序 5.計數排序 6.基數排序 7.桶排序 一.插入排序 1.第乙個元素認為已經排好序了 2.從第二個元素開始考慮,考慮第j個元素 3.從後往前比較,前面數大於第j個元素,則往後挪乙個位置 4.挪到數小於第j個元素,或者挪完,此時因為...