排序演算法 2

2021-07-24 17:44:15 字數 1545 閱讀 3749

- 歸併排序(merge sort)

依舊先上源**

#include 

#include

void merge(int sourcearr,int temparr, int startindex, int midindex, int endindex)

while(i != midindex+1)

temparr[k++] = sourcearr[i++];

while(j != endindex+1)

temparr[k++] = sourcearr[j++];

for(i=startindex; i<=endindex; i++)

sourcearr[i] = temparr[i];

}void mergesort(int sourcearr, int temparr, int startindex, int endindex)

}int main(int argc, char * argv)

; int i, b[8];

mergesort(a, b, 0, 7);

for(i=0; i<8; i++)

printf("%d ", a[i]);

printf("\n");

return

0;}

對於歸併排序,我們可以把一列數排序,也可以把好多列數排序。

歸併其實就是把這些數乙個個分開,然後在一組組的有序的合併起來。

先講需要的變數

int sourcearr

這個陣列用來存放排好序的數字們,

int temparr

這個陣列用來暫時存放資料,

int startindex, int midindex, int endindex

這個是開始,中點,終點;

midindex = (startindex + endindex) / 2;

找到中點,然後一分為二,直到分成乙個乙個的,這時候第一階段就算是完成了;

接下來是第二階段,排序開始。

while(i!=midindex+1 && j!=endindex+1)

while(i != midindex+1)

i 代表著前一塊的數值下標,j 代表後面一段的下標

對於前後這兩段的數值們,都先將指標放在第乙個數值那裡,然後,如果前面的大於後面的,就先將它放入temp陣列裡,暫時存一下,然後指標向後挪乙個,以此類推,直至一方指標走到底,結束了第一段。

此時,其中一段會有剩餘,接下來就將這段剩餘一起放入temp陣列。

這樣,這兩段就排好大小了,再把排好的放到source陣列裡存好。

一步步,直到最後排好。

這個樣子,歸併就結束了,來乙個示意圖:

好了,這個也結束了…

排序 排序演算法2

思想 堆,堆頂元素 即第乙個元素 必為最小項 小頂堆 公升序序列 或者最大項 大頂堆 降序序列 若以一維陣列儲存乙個堆,則堆對應一棵完全二叉樹,且所有非葉結點的值均不大於 或不小於 其子女的值,根結點 堆頂元素 的值是最小 或最大 的。雖然說是一棵完全二叉樹,但不是說就得根據這些資料還需要重新建立資...

排序演算法2

這是 漫談經典排序演算法系列 第二篇,解析了各種插入排序演算法 主要包括 直接插入排序 折半插入排序 表插入排序 希爾插入排序。每一種演算法的開頭都敘述了引出該演算法的原因,然後給出 最後分析演算法效率及和其他插入排序相比,優劣在 各種排序演算法的解析請參考如下 漫談經典排序演算法 一 從簡單選擇排...

排序演算法 2

快速排序 quicksort 演示 現在左側是比70小的數,右側是比70大的數。繼續以左側陣列為例解釋,基準位歸位 while i j 1 arr begin arr j arr j tmp quick sort arr,begin,j 1 quick sort arr,j 1,end public...