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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

快速排序和选择模版类

發(fā)布時間:2023/12/4 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 快速排序和选择模版类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

快速排序和選擇模版類

template<typename T> void insert_sort(T *array,int start,int end) {for (int i = start + 1; i < end + 1; ++i) {int j = i - 1 ;T key = array[i];while (j >= start && key < array[j]){array[j+1] = array[j];j--;}array[j+1] = key;} } template <typename T> KeyValuePair partition(T *array,int start,int end ,const T key) {KeyValuePair line(start-1,start-1);for (int i = start; i < end + 1; ++i) {if(array[i] < key){line.key++;line.value++;T temp = array[i];array[i] = array[line.value];array[line.value] = array[line.key];array[line.key] = temp;}else if(array[i] == key){line.value++;array[i] = array[line.value];array[line.value] = key;}}return line; } template<typename T> T select(T*array,int start,int end,int index) {if(start == end) return array[start];const int constant_num = 5;int remainder = (end - start + 1) % constant_num;int zero = remainder == 0 ? 0 : 1;int num = (end - start + 1) / constant_num + zero;T *median = new T[num];if(remainder){insert_sort<T>(array,start + (num - 1 ) * constant_num,start + (num - 1 ) * constant_num + remainder-1);median[num-1] = array[start + (num - 1 ) * constant_num + (remainder - 1)/2];}for (int i = 0; i < num - zero; ++i) {insert_sort<T>(array,start + i * constant_num,start + (i+1) * constant_num - 1);median[i] = array[start + i * constant_num + constant_num / 2];}T key = select<T>(median,0,num-1,num/2 + (num % 2 == 0 ? 0 : 1));delete[] median;//劃分int middle = partition<T>(array,start,end,key).value;//遞歸求解int position = middle - start + 1;if(index == position){return array[middle];}else if(index < position){return select<T>(array,start,middle-1,index);}else{return select<T>(array,middle + 1,end,index - position);} } template<typename T> void quick_sort(T *array,int start,int end) {if(start<end){T median = select<T>(array,start,end,(end - start + 1)/2 + (end - start + 1)%2);KeyValuePair middle_line = partition<T>(array,start,end,median);quick_sort<T>(array,start,middle_line.key);quick_sort<T>(array,middle_line.value + 1,end);} }

KeyValuePair類鏈接

總結(jié)

以上是生活随笔為你收集整理的快速排序和选择模版类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。