基本排序演算法的總結

2021-08-19 18:21:20 字數 3169 閱讀 1722

void print(int a, const int len);//輸出函式

void sort1(int a, const int len);//方法一:冒泡

void sort2(int a, const int len);//方法二:異或(只能整型)

void sort3(int a, const int len);//方法三:插入排序

void sort4(int a, const int len);//方法四:選擇排序

void sort5(int a, const int len);//方法五:希爾排序

void sort6(int a, int begin, int end);//方法六:快速排序

void sort7(int a, const int len);//方法七:堆排序

void sort8(int a, const int len);//方法八:歸併排序

int main()

return 0;

}void  print(int a, const int len)

cout << "\n" << endl;

}void sort1(int a, const int len)//方法一:冒泡}}

}//氣泡排序圖的形象化,來自維基

void sort2(int a, const int len)//方法二:異或,缺點:只能整型}}

}void sort3(int a, const int len)//方法三:插入排序

a[j] = t;//儲存的值放到j;

break;//插入之後退出}}

}//插入排序圖的形象化,來自維基

void sort4(int a, const int len)//方法四:選擇排序

}int t = a[i];

a[i] = a[k];

a[k] = t;}}

void sort5(int a, const int len)//方法五:希爾排序

}int t = a[j];//交換

a[j] = a[k];

a[k] = t;}}

d /= 2;}}

void sort6(int a, int belenin, int end)//方法六:快速排序

int part(int a, int belenin, int end)//方法六的乙個呼叫排序函式

//交換a[belenin]和a[i]

int t = a[belenin];

a[belenin] = a[i];

a[i] = t;

return i;

//快速排序圖的形象化,來自維基

/*堆的結構類似於完全二叉樹,每個結點的值都小於或者等於其左右孩子結點的值,或者每個節點的值都大於或等於其左右孩子的值

堆排序過程將待排序的序列構造成乙個堆,選出堆中最大的移走,再把剩餘的元素調整成堆,找出最大的再移走,重複直至有序

來看一下實現*/

//堆排序

void sort7(int a, const int len)

//從堆中的取出最大的元素再調整堆

for (i = len - 1; i > 0; --i)

}//再看 調整成堆的函式

void heapify(int a, const int first, int end)//宣告方法七中的一部分

}//堆排序圖的形象化,來自維基

//分成兩部分

int start1 = start, end1 = mid;

int start2 = mid + 1, end2 = end;

//然後合併

merlene(a, relen, start1, end1);

merlene(a, relen, start2, end2);

int k = start;

//兩個序列一一比較,哪的序列的元素小就放進relen序列裡面,然後位置+1再與另乙個序列原來位置的元素比較

//如此反覆,可以把兩個有序的序列合併成乙個有序的序列

while (start1 <= end1 && start2 <= end2)

relen[k++] = a[start1] < a[start2] ? a[start1++] : a[start2++];

//然後這裡是分情況,如果a2序列的已經全部都放進relen序列了然後跳出了迴圈

//那就表示a序列還有更大的元素(乙個或多個)沒有放進relen序列,所以這一步就是接著放

while (start1 <= end1)

relen[k++] = a[start1++];

//這一步和上面一樣

while (start2 <= end2)

relen[k++] = a[start2++];

//把已經有序的relen序列放回a序列中

for (k = start; k <= end; k++)

a[k] = relen[k];

//歸併排序圖的形象化,來自維基

基本排序演算法總結

1.插入排序 insertion sort o n2 對少量資料排序很有效,不需要額外的儲存空間。待排序列已經是從小到大,最壞就是逆序的時候了。且是穩定的。include include int exchange int a,int i,int j int insert int a,int s,in...

基本排序演算法總結

排序演算法很多,這裡做個總結,最重要的是記住演算法思想,而不是記住程式怎麼寫。程式過一段時間就會忘了,演算法原理熟悉了現場寫出來應該是很容易的。時間複雜度為o n 2 的三種排序演算法 插入排序 選擇排序 氣泡排序。插入排序 插入排序是選定元素找位置。對於位置為p上的元素,假定0 p 1的元素已經排...

基本排序演算法總結

排序演算法的評價 評價排序演算法的一般準則是 平均情況下的排序速度 最優最劣情況下的速度 行為是否自然 是否以相等的關鍵字重排元素 陣列的排序速度直接與比較 comparison 次數和交換 exchange 次數相關,其中交換的作用更大,因為占用的時間多。如果頻繁遭遇到最優最劣情況,則最優和最劣情...