幾種排序演算法的C 實現

2021-08-11 14:36:50 字數 1478 閱讀 9582

這兩天學習幾種常見的排序演算法,對照書本和一些部落格自己實現了一遍,貼在這裡當個備份,供以後複習。

#include using namespace std;

void printa(int *a, int len, int i)

//插入排序——直接插入排序(straight insertion sort)

void straightinsertsort(int a, int len)

a[j+1] = tmp;

} printa(a, len, i); }}

//插入排序—希爾排序(shell's sort)

void shellinsertsort(int a, int len, int dk)

a[j+dk] = tmp;

} printa(a, len, i); }}

void shellsort(int a, int len)

}//選擇排序—簡單選擇排序(****** selection sort)

void selectsort(int a, int len)

printa(a, len, i); }}

//選擇排序—堆排序(heap sort)

void createheap(int a, int len)

}else

break;

//printa(a, len, i);

} }}void heapsort(int a, int len)

}//交換排序—氣泡排序(bubble sort)

void bubblesort(int a, int len)

} high--;

for (int k=high; k>low; k--) //反向冒泡,把最小值放low位

}low++;

if (exchange==0) //上一趟排序沒有交換元素,說明已經排好序,break

printa(a, len, i); }}

//交換排序—快速排序(quick sort)

void quicksort(int a, int len, int low, int high)

int left = low, right = high;//用作遞迴引數

int pos = low;

while (high > low)

if (high <= low)

quicksort(a, len, left, pos-1);

quicksort(a, len, pos+1, right);

}//歸併排序(merge sort)

void mergesort(int a, int len)

int part1 = len/2;

int part2 = len - len/2;

int *arry1 = new int[part1];

int *arry2 = new int[part2];

for (int i=0; i

C 實現幾種排序演算法

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

幾種排序演算法的C 實現

插入排序 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 合併...

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

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