国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

C語言實現桶排序的方法示例

2020-01-26 13:49:37
字體:
來源:轉載
供稿:網友

本文實例講述了C語言實現桶排序的方法。分享給大家供大家參考,具體如下:

一、定義

假定:輸入是由一個隨機過程產生的[0, 1)區間上均勻分布的實數。將區間[0, 1)劃分為n個大小相等的子區間(桶),每桶大小1/n:[0, 1/n), [1/n, 2/n), [2/n, 3/n),…,[k/n, (k+1)/n ),…將n個輸入元素分配到這些桶中,對桶中元素進行排序,然后依次連接桶輸入0 ≤A[1..n] <1輔助數組B[0..n-1]是一指針數組,指向桶(鏈表)。

二、性能

對于N個待排數據,M個桶,平均每個桶[N/M]個數據的桶排序平均時間復雜度為:

O(N)+O(M*(N/M)*log(N/M))=O(N+N*(logN-logM))=O(N+N*logN-N*logM)

快排的時間復雜度為n*log2(n)

當N=M時,即極限情況下每個桶只有一個數據時。桶排序的最好效率能夠達到O(N)。

桶排序是穩定的

三、實現

/*==============================8 name:bucket sort--------------------------------time complexity:averageO(n+nlogn-nlogm)--------------------------------space complexity:O(n)--------------------------------stability:unstable==============================*///suppose: 0<data[i]<100//we should design the project function based on the data distributionvoid bucket_sort(std::vector<int> &a){  std::vector<std::vector<int>> bucket;  bucket.resize(10);  std::vector<int>::iterator it=a.begin();  while(it!=a.end())  {    int idx=*it/10;    bucket[idx].push_back(*it);    it++;  }  std::vector<std::vector<int>>::iterator it1=bucket.begin();  while(it1!=bucket.end())  {    simple_sort(*it1);    it1++;  }  it=a.begin();  it1=bucket.begin();  while(it!=a.end() && it1!=bucket.end())  {    std::vector<int>::iterator tmp_it=(*it1).begin();    while(tmp_it!=(*it1).end())    {      *it=*tmp_it;      tmp_it++;      it++;    }    it1++;  }}

PS:這里再為大家推薦一款關于排序的演示工具供大家參考:

在線動畫演示插入/選擇/冒泡/歸并/希爾/快速排序算法過程工具:
http://tools.VeVB.COm/aideddesign/paixu_ys

希望本文所述對大家C語言程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 中宁县| 湘潭县| 唐山市| 保山市| 重庆市| 合山市| 白水县| 屏东县| 宝丰县| 余庆县| 卢湾区| 龙泉市| 广汉市| 迁安市| 二连浩特市| 九台市| 搜索| 焦作市| 霸州市| 鄂托克前旗| 图片| 无棣县| 昌平区| 绥中县| 兴隆县| 恩平市| 安福县| 东平县| 山阳县| 古交市| 凤山市| 遵化市| 洛阳市| 新密市| 宁国市| 昭苏县| 南澳县| 沙坪坝区| 富顺县| 扬中市| 宣威市|