日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法-排序-k排序(算法导论第三版第八章思考题8-5)

發布時間:2023/12/4 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法-排序-k排序(算法导论第三版第八章思考题8-5) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

算法-排序-k排序

算法導論第三版第八章思考題8-5
時間復雜度Θ(nlg(n/k))。
利用最小堆完成,把元素分成k個堆,每個堆大小?n/k?。
利用堆作為子排序穩定,也可以采用其他排序作為子排序,子排序的算法時間復雜度保證在Θ(klgk)就行。

#include "k_sort_heap.h" int left_k_sort(int parent) {return (parent << 1) + 1; } int right_k_sort(int parent) {return (parent << 1) + 2; } void heapify_k_sort(int *array,int heap_size,int parent_index) {int smallest = parent_index;int left = left_k_sort(parent_index);int right = right_k_sort(parent_index);if(left < heap_size && array[left]< array[smallest]){smallest = left;}if(right < heap_size && array[right] < array[smallest]){smallest = right;}if(smallest != parent_index){int temp = array[parent_index];array[parent_index] = array[smallest];array[smallest] = temp;heapify_k_sort(array,heap_size,smallest);} } void build_k_sort_heap(int *array,int length) {for (int i = length/2 - 1; i >=0; --i) {heapify_k_sort(array,length,i);} } int extra_minimum(int *array,int & heap_size) {int minimum = array[0];array[0] = array[heap_size-1];heap_size--;heapify_k_sort(array,heap_size,0);return minimum; } void k_sort(int *array,int length,int k) {int initial_heap_size = length/k + (length % k == 0 ? 0 : 1);int *heap = new int [initial_heap_size];int current_heap_size = 0;for (int i = 0; i < k; ++i) {for (int j = 0; j < initial_heap_size; ++j){if(i + (j * k) < length){heap[j] = array[i + (j * k)];current_heap_size++;}}build_k_sort_heap(heap,current_heap_size);int j = 0;while (current_heap_size>0){array[i + (j * k)] = extra_minimum(heap,current_heap_size);j++;}}delete[] heap; }

總結

以上是生活随笔為你收集整理的算法-排序-k排序(算法导论第三版第八章思考题8-5)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。