#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...