各種排序演算法C 實現

2021-07-23 21:50:14 字數 1507 閱讀 1285

/

/各種排序演算法的實現/*

交換函式*/

void swap(

int*list,

int low,

int high )/*

小於函式*/

bool lt(

const

int low,

const

int high )/*

插入排序(穩定)

原理:插入排序逐個處理待排序的記錄。每個新記錄與前面已排序的子串行進行比較,

將它插入到子串行中正確的位置

代價是n2*/

void inssort(

int*list,

int n )}/

*氣泡排序(穩定)

原理:第一次的內部for迴圈從記錄陣列的底部比較到頂部,比較相鄰的值。

如果低序號的值比高序號的值大,則二者交換順序

代價是n2*/

void bubsort(

int*list,

int n )}}

/*選擇排序(不穩定)

原理:選擇排序的第i次是「選擇」陣列中第i小的記錄,並將該記錄放到陣列的第i個位置。

即首先從未排序的序列中找到最小的值,接著找到次小的,依次類推

代價是n2*/

void selsort(

int*list,

int n )

swap( list, i, low_index );}

}/*插入排序函式(shell排序的輔助函式)*/

void inssort(

int*list,

int n,

int incr )}}

/*shell排序(不穩定)

原理:將序列分成子串行,然後分別對子序列用插入排序的方法進行排序,最後將子串行組合起來。

代價是n1.5*/

void shellsort(

int*list,

int n )

}inssort(list, n, 1);}

/*快速排序(不穩定)

原理:首先選擇乙個軸值,小於軸值的結點被放到軸值的左邊,大於軸值的結點被放到軸值的右邊,這樣軸值就被放在了正確的位置上。

然後對軸值左邊和右邊的子串行進行類似操作。

第一次呼叫的形式為quicksort(list,0,n-1)

代價是n*logn*/

void quicksort(

int*list,

int low,

int high)

while

(left

<

right);

swap(list,

left

,right);

swap(list,

left

, high)

;quicksort(list, low,

left

- 1)

;quicksort(list,

left

+ 1, high);}

各種排序演算法C 實現

include include include using namespace std 插入排序 void insertsort int num,int len 氣泡排序 void bubblesort int num,int len if flag break 選擇排序 void selectso...

各種排序演算法及其C 實現

基本思想 每次將乙個待排序的資料元素,插入到前面已經排好序的數列中的適當位置,使數列依然有序 直到待排序資料元素全部插入完為止。基本思想 每一趟從待排序的資料元素中選出最小 或最大 的乙個元素,順序放在已排好序的數列的最後,直到全部待排序的資料元素排完為止。基本思想 兩兩比較待排序資料元素的大小,發...

各種排序演算法的C 實現

include include include include include include using namespace std void bubble vector a 氣泡排序 void insert vector a 插入排序 void shellsort vector a 希爾排序 i...