排序演算法(C語言實現)

2021-09-29 23:45:57 字數 1575 閱讀 1393

本文共介紹了7種排序演算法

參考文章:

1.1 基本思想:依次向後兩兩相鄰比較,大的向後移

1.2 **示例

void bubblesort(int *a,int n)

} }}

2.1 基本思想:從無序佇列中選擇最小值,放置到有序佇列的末尾

2.2 **示例

void selectsort(int *a,int n)

a[j+1]=tmp; //插入

}}

4.1 基本思想:插入排序的優化,增量為2x或3x+1

4.2 **示例

void shellsort(int *a,int n)

a[j+h] = tmp;

} h=h/3;

}}

5.1 基本思想:分而治之,根據基準值將佇列分成兩個部分,一部分小於基準值,一部分大於基準值,然後分別遞迴這兩個部分

5.2 **示例

int getkey(int *a,int left,int right)

a[left]=a[right];

while((left6.1 基本思想:分而治之,將序列拆分成多個子串行,使每個子串行有序

6.2 **示例

void merge(int *a,int left,int right,int mid)

}

6.2.1 非遞迴

void unrecursive(int *a,int n)

merge(a,left,right,mid);

}len=len*2;

}}

堆排序的堆結構是乙個完全二叉樹結構;

//完美二叉樹:除了葉子節點外的每個節點都有兩個孩子

//完全二叉樹:除了最後一層外其他每層都被完全填充,並所有節點保持左對齊

//完滿二叉樹:每一層都被完全填充

//完全二叉樹節點關係:父節點k,左節點2k+1,右節點2k+2(k從0開始)

推導:7.3 **示例

void sink(int *a,int n,int k)

if(a[left] < a[k]) //子節點小於根節點值,不需要繼續排序,退出

else //子節點大與根節點值,交換;

k = left; //對子節點繼續比較 }}

void heapsort(int *a,int n)

//移除根節點,重新構建堆

while(n>0)

}

排序演算法 氣泡排序 C語言實現

氣泡排序介紹 氣泡排序 bubble sort 又稱為氣泡排序。這是一種較簡單的排序演算法。它會遍歷若干次要排序的陣列,每次遍歷時,它都會從前往後依次比較相鄰兩個數的大小 如果前者大於後者,則兩者位置互換。由此,一次遍歷後,最大元素就在數列末尾。採用相同方法再次遍歷時,第二大的元素就被排列在最大元素...

c語言 實現堆排序演算法

今天在 演算法導論 第二版看完了 堆排序 演算法,就順便用c語言實現了一下。堆排序演算法的核心思想,使用一種二叉堆的資料結構來儲存資料,其中二叉堆 最小二叉堆 的主要性質為 1 父節點小於所有的子節點的數值 注 最小堆 2 二叉堆為滿二叉樹 其中堆排序演算法,主要包括一下幾個主要的部分 1 保持堆特...

氣泡排序演算法C語言實現

氣泡排序 bubblesort 的基本概念是 依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟 首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。在...