記錄學習 C語言資料結構實現一些常見排序

2021-10-01 11:28:38 字數 3111 閱讀 3174

實現**如下:

# include

# include

# include

//內部排序

/*本篇**包括:直接插入排序、折半插入排序、希爾插入排序、氣泡排序、快速排序、簡單選擇排序、2路歸併排序*/

//定義結構體陣列

typedef

struct array

array,

* parr;

//初始化陣列

parr init_array

(parr parr);/*

直接插入排序:

空間複雜度:o(1);時間複雜度:最好o(n),平均o(n2),最壞o(n2);穩定性:穩定

適用於順序儲存和鏈式儲存

*/void

insertsort

(parr parr);/*

折半插入排序:

空間複雜度:o(1);時間複雜度:最好o(n),平均o(n2),最壞o(n2);穩定性:穩定

適用於順序儲存

*/void

bin_insertsort

(parr parr);/*

希爾插入排序:

空間複雜度:o(1);時間複雜度:一般o(n1.3),最壞o(n2);穩定性:不穩定

適用於順序儲存

*/void

shell_insertsort

(parr parr);/*

氣泡排序:

空間複雜度:o(1);時間複雜度:最好o(n),平均o(n2),最壞o(n2);穩定性:穩定

適用於順序儲存和鏈式儲存

*/void

bubblesort

(parr parr);/*

快速排序:

空間複雜度:o(log2n);時間複雜度:最好o(nlog2n),平均o(nlog2n),最壞o(n2);穩定性:不穩定

適用於順序儲存(鏈式儲存)

*/void

quicksort

(parr parr,

int low,

int high)

;//輔助快速排序的partition函式

intpartition

(parr parr,

int low,

int high);/*

簡單選擇排序:

空間複雜度:o(1);時間複雜度:最好o(n2),平均o(n2),最壞o(n2);穩定性:不穩定

適用於順序儲存和鏈式儲存

*/void

selectsort

(parr parr);/*

2路歸併排序:

空間複雜度:o(n);時間複雜度:最好o(nlog2n),平均o(nlog2n),最壞o(nlog2n);穩定性:穩定

適用於順序儲存和鏈式儲存

*/void

mergesort

(parr parr,

int low,

int high)

;//2路歸併排序輔助函式merge

void

merge

(parr parr,

int low,

int mid,

int high)

;//2路歸併輔助陣列

int arraylength =

100;

int* b =

(int*)

malloc

(sizeof

(int

)* arraylength)

;int

main

(void

)//初始化陣列

//陣列第一位作為哨兵幫助排序

parr init_array

(parr parr)

for(

int i =

1; i<=parr->length; i++

)return parr;

}//直接插入排序

void

insertsort

(parr parr)

}//折半插入排序

void

bin_insertsort

(parr parr)

for(j=i-

1; j>=high+

1; j--

) parr->pbase[j+1]

= parr->pbase[j]

; parr->pbase[high+1]

= parr->pbase[0]

;}}//希爾排序

void

shell_insertsort

(parr parr)}}

}//氣泡排序

void

bubblesort

(parr parr)}if

(flag)

return;}

}//輔助快速排序的partition函式

intpartition

(parr parr,

int low,

int high)

parr->pbase[low]

= parr->pbase[0]

;return low;

}//快速排序

void

quicksort

(parr parr,

int low,

int high)

}//簡單選擇排序

void

selectsort

(parr parr)}}

//2路歸併排序輔助函式merge

void

merge

(parr parr,

int low,

int mid,

int high)

while

(i<=mid)

parr->pbase[k++

]= b[i++];

while

(j<=high)

parr->pbase[k++

]= b[j++];

}//2路歸併排序

void

mergesort

(parr parr,

int low,

int high)

}

學習c語言資料結構的一些預備知識

資料結構 筆記 預備知識 一.指標 我們將記憶體中位元組的編號稱為位址 address 或指標 pointer 位址從 0 開始依次增加,對於 32 位環境,程式能夠使用的記憶體為 4gb,最小的位址為 0,最大的位址為 0xffffffff。c語言用變數來儲存資料,用函式來定義一段可以重複使用的 ...

基於C語言資料結構 一些錯誤

include stdio.h include malloc.h define maxsize 50 typedef char elemtype typedef struct lnode linklist void initlist linklist l void getelem linklist ...

一些C 資料結構知識

陣列 1.大小固定 2.記憶體連續 3.方便訪問 4.不方便新增刪除 5.儲存單一型別元素 arraylist 陣列列表 1.記憶體連續,可以通過下標訪問,大小不固定 2.方便訪問,不方便新增刪除.3.儲存不同型別的資料.訪問的是object型別,裝拆箱印象效能 list是乙個介面,arraylis...