幾種排序演算法的C 實現

2021-06-06 08:08:00 字數 1179 閱讀 8345

插入排序

#include

#define max_size 1000

using namespace std;

//插入排序,pa為指向陣列的指標,n為陣列元素個數

void insert_sort(int *pa,int n)

*(pa+i)=key;}}

int main()

else

}free(p1);

free(p2);

}//合併排序,pa為指向陣列a的指標,p,r為下標,對a[p..r]進行合併排序

void merge_sort(int *pa,int p,int r)

//返回左孩子節點序號:2i

int left(int i)

//返回右孩子節點序號:2i+1

int right(int i)

//交換指標p1,p2指向的值

void exchange(int *p1,int *p2)

//保持最大堆的性質,pa為指向a的陣列,i為下標

//假設left(i),right(j)滿足最大堆的性質,但a[i]可能小於其左右子樹

//該過程保持其最大堆的性質,使a為最大堆

void max_heapify(int *pa,int i)

}//建堆,pa為指向a的陣列,n為陣列大小

void build_max_heap(int *pa,int n)

}//堆排序,pa為指向a的陣列,n為陣列大小

//注意:要排序的元素下標從1開始

void heap_sort(int *pa,int n)

}int main()

//pa為指向a的陣列,p,r為下標,對a[p..r]進行就地重排,以a[r]為主元

//劃分為小於主元和大於主元的兩部分,返回主元的下標q

//例如:a[1..6]=結果:a[1..6]= q=4

//(元素順序可能與結果不一致,但小於10的元素在10前面,大於10的元素在10後面)

int partition(int *pa,int p,int r)

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

c[i+1]+=c[i];

for(i=n;i>=1;i--)

for(i=1;i<=n;i++)

cout

}

C 實現幾種排序演算法

概念 氣泡排序的大概思想是兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序為止 1.普通冒泡法 void bubblesort vector vi 2.優化冒泡法,增加標誌位,對已經有序的序列不在進行比較 void bubblesort2 vector vi 概念 通過n i次關鍵字間的比較,...

幾種排序演算法的C 實現

這兩天學習幾種常見的排序演算法,對照書本和一些部落格自己實現了一遍,貼在這裡當個備份,供以後複習。include using namespace std void printa int a,int len,int i 插入排序 直接插入排序 straight insertion sort void ...

基於c 實現的幾種排序演算法

插入排序是有乙個已經有序的資料序列,在這個已經排好的資料數列中插入乙個數,要求插入後此資料序列仍然有序。這種演算法適用於少量資料的排序,時間複雜度為o n 2 void insertsort int a,int len a j 1 key 氣泡排序是相鄰的兩個元素比較,像開水冒泡一樣,每輪把最大或最...