首页 > 代码库 > 堆排序
堆排序
不稳定的排序。
时间复杂度: O(nlgn), 空间复杂度O(1)
适合数据结构:数组,二叉树。
经常用到通过数组进行堆排序:
映射后会发生一些变化:
#include<stdio.h> #include<stdlib.h> #include<time.h> #define N 1000000 int numbers[N]={0}; // data void HeapAdjust(int data[], int length, int father){ if(!data || length < 1 || father >= length || father < 0) return; int value = http://www.mamicode.com/data[father]; // set data[0] to save the value of original father for(int child = 2*father+1; child < length; child = 2*father+1){ if(child < length-1 && data[child] < data[child+1]) ++child; if(data[child] < value) break; else data[father] = data[child]; father = child; } data[father] = value; } void HeapSort(int data[], int length) { for(int i = length/2-1; i >= 0; --i) HeapAdjust(data, length, i); for(int i = length-1; i >= 0; --i){ int tem = data[i]; data[i] = data[0]; data[0] = tem; HeapAdjust(data, i, 0); // DESC } } void init_array() { int i; /*srand((unsigned) time(NULL));*/ for(int i = 0; i < N; i++) numbers[i] = rand() % N; } void print_array() { int i; for(i = 0; i < N; i++) printf("%d\t", numbers[i]); } int main(){ init_array(); HeapSort(numbers, N); print_array(); printf("\n"); return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。