幾種常見的排序

2021-09-26 08:52:01 字數 1096 閱讀 2211

一、插入排序

思想:將陣列中的每乙個數字與其前面的數字進行比較,當該數字大於前面的數字,則不處理,當其小於前面的數字將後面的數字,則將資料移位,將其插入。

給每個數字在其前面所有的數字之中找到合適的位置,並插入。插入排序中資料待插入的前面序列的資料是有序的。

void sort(int *arr,int len)//插入排序

else //小於前面的數,將移動資料給tmp空出位置

}arr[j+1] =tmp;//放入tmp

}}

二、氣泡排序

思想:對陣列進行迴圈遍歷,每次把最大的數字沉入最後,相鄰兩個數字之間進行比較,如果前面的數字大於後面的數字,將兩個數字進行交換,繼續比較,就可以使最大的數字儲存於最後面。

void sort(int *arr,int len)

} }}

三、快速排序

思想:快速排序是將一組資料按照乙個基準進行劃分,比基準小的全部在基準的前面,比基準大的全部在基準的後面,這就是快排的一次劃分。快排的基準一般是第乙個數來充當,一次劃分之後基準就在正確的位置上,之後對基準的前面和後面的資料分別進行處理。

快排有兩種實現方式:遞迴和非遞迴。遞迴快排的空間消耗比較大,遞迴沒有全部完成就不會返回,非遞迴的實現是依靠棧來實現的。

首先來看一下遞迴實現

int sortpart(int* arr,int low,int high) //快排的一次劃分

if(low == high)

else

while((low非遞迴實現,依靠棧的特性,根據 low 與 high 的值,進行一次劃分,將資料儲存於棧中,棧中存在一次劃分後的兩段資料,low  par-1與par+1  high。進入while迴圈,先出棧進行新區域的再次劃分,將返回的兩段資料進行入棧。

//快排的非遞迴使用棧進行排序

void quick_sort(int *arr,int len)

if(high - 1 > par)

while(top > 0)

if(high - 1 > par)

}}

常見的幾種排序

常見的排序 選擇排序 直接選擇排序 堆排序 交換排序 氣泡排序 直接交換排序 插入排序 直接插入排序 shell排序 折半插入排序 歸併排序 基數排序 1.選擇排序 1.1直接選擇排序 選擇排序 直接選擇排序 每迴圈一次取出其中最大或者最小的乙個 插入到靠前或者靠後的位置 當然第一次從0開始,第二次...

常見的幾種排序

前言 最近聽公尺老師講了一遍排序,之前上課老師也講過,這次又聽了一遍,對排序有了更進一步的認識。接下來介紹一下最常見的幾種排序,以及自己對排序的理解。插入排序 插入排序包括 直接插入排序與shell排序 1.直接插入排序 概念 通過線性搜尋來確定待插入記錄的位置 演算法 圖中每一行的資料表示插入了第...

幾種常見的排序

1 插入排序 for int i 1 i n i 2 氣泡排序 for int i 0 i n 1 i 3 選擇排序 for int i 0 i n 1 i swap array,i,lowindex 4 快速排序 void swap int a,int i,int j int partition ...