最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解桶排序算法的思路及C++編程中的代碼實現

 更新時間:2016年07月06日 15:28:31   作者:kkun  
桶排序即是先把每個桶中的元素進行排序然后遍歷桶依次列出元素的算法,桶排序在元素較少的情況下很高效,以下我們就來詳解桶排序算法的思路及C++編程中的代碼實現:

算法思路理解
我自己的理解哈,可能與網上說的有一些出入,大體都是同樣的原理

無序數組有個要求,就是成員隸屬于固定(有限的)的區(qū)間,如范圍為[0-9](考試分數為1-100等)

例如待排數字

[6 2 4 1 5 9]

準備10個空桶,最大數個空桶

[6 2 4 1 5 9]  待排數組

[0 0 0 0 0 0 0 0 0 0] 空桶

[0 1 2 3 4 5 6 7 8 9] 桶編號(實際不存在)

1,順序從待排數組中取出數字,首先6被取出,然后把6入6號桶,這個過程類似這樣:空桶[ 待排數組[ 0 ] ] = 待排數組[ 0 ]

[6 2 4 1 5 9]  待排數組

[0 0 0 0 0 0 6 0 0 0] 空桶

[0 1 2 3 4 5 6 7 8 9] 桶編號(實際不存在)

2,順序從待排數組中取出下一個數字,此時2被取出,將其放入2號桶,是幾就放幾號桶

[6 2 4 1 5 9]  待排數組

[0 0 2 0 0 0 6 0 0 0] 空桶

[0 1 2 3 4 5 6 7 8 9] 桶編號(實際不存在)

3,4,5,6省略,過程一樣,全部入桶后變成下邊這樣

[6 2 4 1 5 9]  待排數組

[0 1 2 0 4 5 6 0 0 9] 空桶

[0 1 2 3 4 5 6 7 8 9] 桶編號(實際不存在)

0表示空桶,跳過,順序取出即可:

1 2 4 5 6 9

201676152256167.png (500×216)

C++示例:
以下是桶排序的c++程序,其中運用了list自帶的sort函數。

#include<iostream>
#include<list>
#include<algorithm>
using namespace std;
 
void bucketsort(double* a, int n) {
 list<double>* b = new list<double>[n];
 for (int i = 0; i < n; i++) {
 b[int(a[i])].push_back(a[i]);
 }
 for (int i = 0; i < n; i++) {
 b[i].sort();
 }
 for (int i = 0,j=0; i < n; i++) {
 while (b[j].size() < 1)j++;
 a[i] = b[j].front();
 b[j].pop_front();
 }
}
 
int main() {
 double arr[] = {0.1,1.1,2.2,3.5,1.5,2.3,7.5,1.7};
 int n = 8;
 bucketsort(arr, n);
 for (int i = 0; i < 8; i++) {
 cout << arr[i] << " ";
 }
 cout << endl;
 return 0;
}

程序運行結果:

201676152355715.png (326×91)

補充說明三點
1,桶排序是穩(wěn)定的
2,桶排序是常見排序里最快的一種,比快排還要快…大多數情況下
3,桶排序非???但是同時也非常耗空間,基本上是最耗空間的一種排序算法

相關文章

  • C語言中的結構體的入門學習教程

    C語言中的結構體的入門學習教程

    這篇文章主要介紹了C語言中的結構體的入門學習教程,以struct語句定義的結構體是C語言編程中的重要基礎,需要的朋友可以參考下
    2015-12-12
  • C語言怎樣用指針指向字符串

    C語言怎樣用指針指向字符串

    這篇文章主要介紹了C語言怎樣用指針指向字符串問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • C++ 字符串的反轉五種方法實例

    C++ 字符串的反轉五種方法實例

    通過不同的方法,實現對所輸入字符串的反轉,有需要的朋友可以參考一下
    2013-09-09
  • C++ OpenCV實戰(zhàn)之手寫數字識別

    C++ OpenCV實戰(zhàn)之手寫數字識別

    這篇文章主要為大家詳細介紹了如何使用machine learning機器學習模塊進行手寫數字識別功能,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-08-08
  • C++實現遺傳算法

    C++實現遺傳算法

    這篇文章主要介紹了C++實現遺傳算法,以實例形式較為詳細的分析了遺傳算法的C++實現技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-12-12
  • C語言編程入門必背的示例代碼整理大全

    C語言編程入門必背的示例代碼整理大全

    這篇文章主要為大家整理并介紹了C語言編程必背的示例代碼大全,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • OpenCV實現直線檢測并消除

    OpenCV實現直線檢測并消除

    這篇文章主要為大家詳細介紹了OpenCV實現直線檢測并消除,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C++?超詳細示例講解list的使用

    C++?超詳細示例講解list的使用

    list是一種序列式容器。list容器完成的功能實際上和數據結構中的雙向鏈表是極其相似的,list中的數據元素是通過鏈表指針串連成邏輯意義上的線性表,也就是list也具有鏈表的主要優(yōu)點,即:在鏈表的任一位置進行元素的插入、刪除操作都是快速的
    2022-07-07
  • C++?繼承的范例講解

    C++?繼承的范例講解

    繼承是C++面向對象編程中的一門。繼承是子類繼承父類的特征和行為,或者是繼承父類得方法,使的子類具有父類得的特性和行為。重寫是子類對父類的允許訪問的方法實行的過程進行重新編寫,返回值和形參都不能改變。就是對原本的父類進行重新編寫,但是外部接口不能被重寫
    2022-06-06
  • Visual Studio中scanf函數報錯的幾種解決方法

    Visual Studio中scanf函數報錯的幾種解決方法

    本文主要介紹了Visual Studio中scanf函數報錯的幾種解決方法,文中通過圖文示例介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-03-03

最新評論

枞阳县| 清流县| 正安县| 申扎县| 丘北县| 巴青县| 萝北县| 河南省| 海淀区| 龙川县| 五常市| 大新县| 凤翔县| 长丰县| 宽甸| 天门市| 平谷区| 泰来县| 东乌珠穆沁旗| 福泉市| 吴川市| 丹江口市| 简阳市| 沛县| 祁连县| 鄂尔多斯市| 浑源县| 青龙| 宁都县| 疏附县| 沾化县| 苍梧县| 藁城市| 平陆县| 大理市| 抚顺市| 兴宁市| 合阳县| 吉安市| 长葛市| 灵台县|