堆排序

来源:互联网 发布:天尚网络机顶盒好不好 编辑:程序博客网 时间:2024/06/11 08:52

堆排序:

#include<stdlib.h>#include<stdio.h>#define ARRAY_LENGTH (10)int left(int i){i = 2*i + 1;return i;}int right(int i){i = 2*i + 2;return i;}void heap_fix(int *A,int i,int heap_size){if(A==NULL || i<0){printf("Error input\n");return ;}int l = left(i);int r = right(i);int largest=0;if(l<=heap_size && A[l]>A[i]){largest = l;}else{largest = i;}if(r<=heap_size && A[r]>A[largest]){largest = r;}if(largest != i){int temp = A[i];A[i] = A[largest];A[largest] = temp;heap_fix(A,largest,heap_size);}}void build_heap(int *A,int length){if(A==NULL || length<=0){printf("Error input\n");return;}int heap_size = length-1;for(int i = heap_size/2;i>=0;i--){heap_fix(A,i,heap_size);}}void heap_sort(int *A,int length){build_heap(A,length);int heap_size = length -1;for(int i = length-1 ; i > 0 ; i--){int temp = A[0];A[0] = A[i];A[i] = temp;heap_size--;heap_fix(A,0,heap_size);}}int main(){int A[ARRAY_LENGTH] ={1,4,5,7,8,9,10,2,3,6};heap_sort(A,ARRAY_LENGTH);for(int i =0 ; i<ARRAY_LENGTH ; i++){printf("num %d : %d \n",i,A[i]);}system("pause");return 0;}


0 0
原创粉丝点击