資料結構與演算法之排序大全

2021-07-22 06:20:35 字數 3278 閱讀 6065

#include #include #include #define true (1)

#define false (0)

#define size (10)

#define key_num (10)

typedef unsigned char boolean;

static void swap(void *a, void *b, int len);

static void swap1(int *a, int *b);

int print_arr(int *arr, int len);

void bubble_sort(int *arr, int len);

void bubble_sort1(int *arr, int len);

void bubble_sort2(int *arr, int len);

void insert_sort(int *array, int length); //插入排序, 時間複雜度o(n^2),穩定

void shell_sort(int *arr, int len);

void select_sort(int *arr, int len);

void quick_sort(int *arr, int l, int r);

boolean merge_sort(int *arr, int len);

void radix_sort(int *arr, int len);

void count_sort(int *arr, int len, int max);

void min_heap_sort_order_asc_to_arr(int *arr, int len);

static void swap(void *a, void*b, int len)

static void swap1(int *a, int *b)

int print_arr(int *arr, int len)

printf("\n");

} return (true);

}//氣泡排序

void bubble_sort(int *arr, int len)

} }}void bubble_sort1(int *arr, int len)

} --j; }}

void bubble_sort2(int *arr, int len)

} }}//插入排序

void insert_sort(int *array, int length) //插入排序, 時間複雜度o(n^2),穩定 }}

//shell排序

void shell_sort(int *arr, int len)

} }}//快速排序

void quick_sort(int *arr, int l,int r)

if (i > 1);

merge_sort(arr, first, mid, temp);

merge_sort(arr, mid + 1, last, temp);

merge_arr(arr, first, mid, last, temp); }}

//歸併排序

boolean merge_sort(int *arr, int len)

merge_sort(arr, 0, len - 1, temp);

free(temp);

temp = null;

} return (true);

}static int get_num_in_ptr(int value, int ptr)

return (value / num) % 10;

}//基數排序

void radix_sort(int *arr, int len)

for (; ptr <= key_num; ++ptr)

for (i = 0, j = 0; i < size; ++i)

bracket[i][0] = 0;

} }for (i = 0; i < size; ++i)

}//計數排序

void count_sort(int *arr, int len, int max)

memset(count, 0, sizeof(arr[0])*(max + 1));

for (i = 0; i < len; ++i)

for (i = 0, j = 0; i <= max; ++i)

} free(count);

count = null;

} //選擇排序

void select_sort(int *arr, int len)

} swap1(&arr[i],&arr[min]);

}}static void min_heap_fix_down(int *arr, int i, int n)

if (arr[j] >= temp)

//把較小的節點往上移動,替換其父節點

arr[i] = arr[j];

i = j;

j = (i << 1)+1;

} arr[i] = temp;

}void min_heap_sort_order_desc_to_arr(int *arr, int len)}

int main(int argc, char **argv)

; int len = sizeof(arr) / sizeof(arr[0]);

int max = 100;

printf("before sorting:");

print_arr(arr, len);

//bubble_sort(arr, len);

//bubble_sort1(arr, len);

//bubble_sort2(arr, len);

//insert_sort(arr, len);

//shell_sort(arr, len);

//quick_sort(arr, 0, len - 1);

//merge_sort(arr, len);

//radix_sort(arr, len);

//count_sort(arr, len, max);

min_heap_sort_order_desc_to_arr(arr, len);

printf("after sorting:");

print_arr(arr, len);

system("pause");

return (true);

}

資料結構與演算法之排序

三 演算法效能 二 七種排序演算法 資料結構之線性表 資料結構之鍊錶 資料結構之串 資料結構之圖 資料結構之排序演算法 對n個資料執行某種操作,使其按照某種規則有序的排列,這樣的操作就是排序。內排序與外排序 按照排序過程中資料是否全放在記憶體中,可以分為內排序和外排序 交插選並 其中內排序又分為插入...

《資料結構與演算法》之排序

資料結構與演算法 之鍊錶 資料結構與演算法 之鏈棧 資料結構與演算法 之佇列 資料結構與演算法 之二分查詢 資料結構與演算法 之二叉樹 如果你是一名程式設計師,或多或少你都了解過 聽說過排序。在專案中我們也會經常用到排序,排序非常重要,現在我在這裡分享一些經典的排序演算法。先附上demo位址 氣泡排...

資料結構與演算法之排序演算法 氣泡排序

2016年10月18日15 34 24 by piaxiaohui 氣泡排序 是一種交換排序,它的基本思想是 兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。氣泡排序的由來,就有些類似於水中的bubble,比較輕的bubble始終在水的底層,而較輕的bubble在水的上層 較輕的b...