排序演算法(二)

2021-08-29 04:09:44 字數 2092 閱讀 7490

快速排序:

/* 快速排序 */

elementtype median3

( elementtype a,

int left,

int right )

void

qsort

( elementtype a,

int left,

int right )

swap

(&a[low]

,&a[right-1]

);/* 將基準換到正確的位置 */

qsort

( a, left, low-1)

;/* 遞迴解決左邊 */

qsort

( a, low+

1, right )

;/* 遞迴解決右邊 */

}else

insertionsort

( a+left, right-left+1)

;/* 元素太少,用簡單排序 */

}void

quicksort

( elementtype a,

int n )

/* 基數排序 - 次位優先 */

/* 假設元素最多有maxdigit個關鍵字,基數全是同樣的radix */

#define maxdigit 4

#define radix 10

/* 桶元素結點 */

typedef

struct node *ptrtonode;

struct node

;/* 桶頭結點 */

struct headnode

;typedef

struct headnode bucket[radix]

;int getdigit (

int x,

int d )

return d;

}void

lsdradixsort

( elementtype a,

int n )

/* 下面開始排序 */

for(d=

1; d<=maxdigit; d++)}

/* 下面是收集的過程 */

list =

null

;for

(di=radix-

1; di>=

0; di--)}

}/* 將list倒入a並釋放空間 */

for(i=

0; i)}

/* 基數排序 - 主位優先 */

/* 假設元素最多有maxdigit個關鍵字,基數全是同樣的radix */

#define maxdigit 4

#define radix 10

/* 桶元素結點 */

typedef

struct node *ptrtonode;

struct node

;/* 桶頭結點 */

struct headnode

;typedef

struct headnode bucket[radix]

;int getdigit (

int x,

int d )

return d;

}void

msd( elementtype a,

int l,

int r,

int d )

/* 下面是分配的過程 */

p = list;

while

(p)/* 下面是收集的過程 */

i = j = l;

/* i, j記錄當前要處理的a的左右端下標 */

for(di=

0; di)/* 遞迴對該桶資料排序, 位數減1 */

msd(a, i, j-

1, d-1)

; i = j;

/* 為下乙個桶對應的a左端 */}}

}void

msdradixsort

( elementtype a,

int n )

演算法 排序演算法(二)

選擇排序,選擇所有元素中最小的乙個放在第一位,然後從剩下的元素中選擇最小的放第二位,依此類推,完成選擇排序。include define m 10001 using namespace std int a m void selectsort int n int t a i a i a min a m...

排序演算法 二

不穩定的排序演算法 簡單選擇排序 每一趟從待排序的資料元素中選出最小 或最大 的乙個元素,順序放在已排好序的數列最前,直到全部待排序的資料元素排完。void selectsort int data int size size if i k swap data i data k 快排 非隨機 快速排序...

排序演算法(二)

基本思想 將乙個記錄插入到已經排序好的有序表中,從而得到乙個新 記錄數增1的有序表。即 先將序列的第乙個記錄看成是乙個有序的子串行,然後從第二個記錄逐個進行插入,直至整個序列有序為止。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。直接插入排序示例 如果碰見乙個和插入元素相等的,那麼插入元素把想插入...