一、插入排序
思想:將陣列中的每乙個數字與其前面的數字進行比較,當該數字大於前面的數字,則不處理,當其小於前面的數字將後面的數字,則將資料移位,將其插入。
給每個數字在其前面所有的數字之中找到合適的位置,並插入。插入排序中資料待插入的前面序列的資料是有序的。
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 ...