c 實現五種基礎的排序演算法

2021-09-02 11:26:18 字數 2696 閱讀 8873

#include

using namespace std;

//輔助函式,交換兩數之值

template

void myswap(t &x, t &y)

const int size = 10;

//一、用直接插入排序法對陣列a中元素進行公升序排序

/*直接插入排序的基本思想是:

*順序地把待排序序列中的各個記錄按其關鍵字的大小,插入到已排序的序列的適當位置。

*/template

void insertionsort( t a, int n)

//插入位置已找到,立即插入

a[j] = temp;

for (int i = 0; i != n; i++)

cout << endl;}}

//二、用選擇法對陣列a中元素進行公升序排序

/**選擇排序的基本思想是:

*不斷從待排序的序列中選取關鍵字最小的記錄放到已排序的記錄序列的後面,直到序列中所有記錄都已排序為止。

*/template

void selectionsort(t a, int n)

myswap(a[i], a[leastindex]);//將這一趟找到的最小元素與a[i]交換

for (int i = 0; i != n; i++)

cout << endl;}}

//三、用起泡法對陣列a中元素進行公升序排序

/*起泡排序的基本思想是:

*將待排序序列中第乙個記錄的關鍵字r1與第二個記錄的關鍵字r2做比較,

*如果r1>r2,則交換r1和r2的位置,否則不交換;

*然後繼續對當前序列中的第二個記錄和第三個記錄同樣的處理,依此類推。

*/template

void bubblesort(t a, int n)

cout << endl;

for (int i = n / 2; i > 0; i /= 2)else

break;

}a[k] = temp;

for (int i = 0; i != size; i++)

cout << endl;}}

}//五、用快速排序法對陣列a中元素進行公升序排序

/**該方法的基本思想是:

1.先從數列中取出乙個數作為基準數。

2.分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。

3.再對左右區間重複第二步,直到各區間只有乙個數。

*/void quicksort(int s, int l, int r)

s[i] = x;

for (int i = 0; i != size; i++)

cout << endl;

quicksort(s, l, i - 1); // 遞迴呼叫

quicksort(s, i + 1, r);}}

int main();

int b[10] = ;

int c[10] = ;

int d[10] = ;

int e[10] = ;

cout << endl;

for (int i = 0; i != size; i++)

cout << endl;

cout << "*********直接插入排序法************" << endl;

insertionsort(a, size);

cout << "*******直接插入排序法結束**********" << endl;

cout << endl;

for (int i = 0; i != size; i++)

cout << endl;

cout << "*********選擇排序法************" << endl;

selectionsort(b, size);

cout << "*******選擇排序法結束**********" << endl;

cout << endl;

for (int i = 0; i != size; i++)

cout << endl;

cout << "*********起泡排序法************" << endl;

bubblesort(c, size);

cout << "*******起泡排序法結束**********" << endl;

cout << endl;

for (int i = 0; i != size; i++)

cout << endl;

cout << "*********希爾排序法************" << endl;

shellsort(d, size);

cout << "*******希爾排序法結束**********" << endl;

cout << endl;

for (int i = 0; i != size; i++)

cout << endl;

cout << "*********快速排序法************" << endl;

quicksort(e, 0,size-1);

cout << "*******快速排序法結束**********" << endl;

for (int i = 0; i != size; i++)

cout << endl;

}

五種排序演算法實現

五種排序演算法實現 classsorter intt arr min arr min arr i arr i t 氣泡排序法實現 publicvoidsort2 intarr j privatevoidswap refintl,refintr 快速排序法實現 publicvoidsort3 intl...

快速排序優化演算法 五種 c

快排優化 2.聚集元素 3.尾遞迴優化 4.插入排序處理小陣列 快排演算法是基於分治策略的排序演算法,其基本思想是,對於輸入的陣列a low,high 按以下兩個步驟進行排序 1 劃分 以a p 為基準將a low high 劃分為三段a low p 1 a p 和a p 1 high 使得a lo...

五種排序演算法 快速排序

1 在陣列中選乙個基準數 通常為陣列第乙個 2 將所有比基準值小的值擺放在基準的前面,所有比基準值大的擺放在基準的後面 相同的數可以放到任意一邊 在這個分割槽推出之後,該基準就處於數列的中間位置。3 遞迴地把 基準值前面的子數列 和 基準值後面的子數列 進行排序。下面以數列a 30,40,10,20...