
基本数据结构和算法
糖馅饼
软件工程在校生
展开
-
归并排序C语言实现
归并排序典型的分治策略的体现,时间复杂度是O(nlgn), 空间复杂度是O(n).属于稳定排序。下面是C语言实现代码。#define MAX 10000000//p, q, r是均是元素的下标void merge(int A[], int p, int q, int r){ int n1 = q - p + 1; int n2 = r - q; int原创 2015-08-01 20:01:13 · 1568 阅读 · 0 评论 -
快排C语言实现
快速排序也是典型的分治策略实现,与归并排序不同,快排的关键部分在于 分 也就是partition部分,快排平均时间复杂度是O(nlgn),最差时间是O(n^2),属于不稳定排序下面是快排的C语言实现。//p, r分别是数组中元素的下标int partition(int A[], int p, int r){ int i, j; i = p - 1; f原创 2015-08-01 20:53:07 · 3422 阅读 · 0 评论 -
插入排序C语言实现
插入排序可是说是最简单的排序算法之一了,时间复杂度是O(N^2),下面是C语言实现void insertion_sort(int *A, int n) { int i, j, x; //i从1开始而不是从0或2开始 for (i = 1; i < n; i++) { x = A[i]; j = i - 1; //j原创 2015-08-01 19:32:50 · 843 阅读 · 0 评论 -
堆排序C语言实现
堆排序可以作为实时排序,是原址排序,不需要额外的空间,时间复杂度是O(nlgn),最好最坏平均情况都是这个,但是是不稳定排序,下面是C语言实现的代码。。//为了简化编程,堆数组元素中的第一个位置不使用。struct heap { int size; int *arr;} h;void max_heapify(struct heap * h, int p){原创 2015-08-02 23:57:10 · 1121 阅读 · 0 评论 -
计数排序C语言实现
计数排序是稳定排序,而且是线性时间内的排序算法,时间复杂度是O(n + k)其中k是待排序数组的范围。计数排序不是原址排序,空间复杂度是O(n + k)//k是指A中的数组范围是0~k 包括0和kvoid count_sort(int A[], int B[], int n, int k){ int *C = (int *)malloc(sizeof(int) *原创 2015-08-04 00:12:14 · 1834 阅读 · 0 评论 -
优先队列C语言实现
优先队列利用堆实现,堆的实现在前面已经说过了,优先队列的一个重要的操作是:1. heap_max O(1) 2. heap_extract_max O(lgn)3. heap_increase_key O(lgn)4, heap_insert O(lgn)下面是C语言实现#define MIN -100000int heap_max(struct heap原创 2015-08-03 23:26:16 · 4880 阅读 · 0 评论