堆排序

来源:互联网 发布:淘宝质量分怎么提高 编辑:程序博客网 时间:2024/06/04 19:20
void max_heap( int *arr , int index , int length ){int largest = index ;int left = 2 * index + 1 ;int right = 2 * index + 2 ;int tmp_value ;if( left < length && arr[index] < arr[left] ){tmp_value = arr[left] ;arr[left] = arr[index] ;arr[index] = tmp_value;largest = left;}if( right < length && arr[index] < arr[right] ){tmp_value = arr[right];arr[right] = arr[index];arr[index] = tmp_value;largest = right;}if( largest != index ){max_heap( arr , largest , length );}}void build_max_heap( int *arr , int length ){int i ;for( i = (length -1 -1 )/2 ; i >= 0 ; i-- ){max_heap( arr , i , length );}}void heap_sort (int *arr , int length ){int i ;int j = 0 ;int tmp_value ;build_max_heap( arr , length );for( i = length -1 ; i >= 1 ; i-- ){tmp_value = arr[0];arr[0] = arr[i];arr[i] = tmp_value;j++;max_heap( arr , 0 , length - j );}}

先定义三个方法

然后执行

int main(){int arr[] = { 1 , 7 , 6 , 8 , 5 , 4 , 3 , 9 , 2 };heap_sort( arr , 9);int i;for( i = 0 ; i < 9 ; i++ ){printf("%d - " , arr[i] );}printf("\n");}

原创粉丝点击