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

Java排序算法之桶排序算法解析

 更新時(shí)間:2023年10月30日 09:43:44   作者:大彤小憶  
這篇文章主要介紹了Java排序算法之桶排序算法解析,桶排序 (Bucket sort)或所謂的箱排序,是一個(gè)排序算法,工作原理是將數(shù)組分到有限數(shù)量的桶子里,每個(gè)桶子再個(gè)別排序,有可能再使用別的排序算法或是以遞歸方式繼續(xù)使用桶排序進(jìn)行排序,需要的朋友可以參考下

Java桶排序算法

桶排序 (Bucket sort)或所謂的箱排序,是一個(gè)排序算法。

工作原理是將數(shù)組分到有限數(shù)量的桶子里,每個(gè)桶子再個(gè)別排序(有可能再使用別的排序算法或是以遞歸方式繼續(xù)使用桶排序進(jìn)行排序)。桶排序是鴿巢排序的一種歸納結(jié)果。當(dāng)要被排序的數(shù)組內(nèi)的數(shù)值是均勻分配的時(shí)候,桶排序使用線(xiàn)性時(shí)間 O ( n ) O(n) O(n)。

桶排序是計(jì)數(shù)排序的升級(jí)版。它利用了函數(shù)的映射關(guān)系,高效與否的關(guān)鍵就在于這個(gè)映射函數(shù)的確定。為了使桶排序更加高效,我們需要做到以下兩點(diǎn):

1. 在額外空間充足的情況下,盡量增大桶的數(shù)量;

2. 使用的映射函數(shù)能夠?qū)⑤斎氲?N 個(gè)數(shù)據(jù)均勻的分配到 K 個(gè)桶中。 同時(shí),對(duì)于桶中元素的排序,選擇何種比較排序算法對(duì)于性能的影響至關(guān)重要。

什么時(shí)候最快:當(dāng)輸入的數(shù)據(jù)可以均勻的分配到每一個(gè)桶中。

什么時(shí)候最慢:當(dāng)輸入的數(shù)據(jù)被分配到了同一個(gè)桶中。

桶排序的基本思想:假設(shè)數(shù)據(jù)在[min,max]之間均勻分布,其中min、max分別指數(shù)據(jù)中的最小值和最大值。那么將區(qū)間[min,max]等分成n份,這n個(gè)區(qū)間便稱(chēng)為n個(gè)桶。將數(shù)據(jù)加入對(duì)應(yīng)的桶中,然后每個(gè)桶內(nèi)單獨(dú)排序。由于桶之間有大小關(guān)系,因此可以從大到小(或從小到大)將桶中元素放入到數(shù)組中。

例如: 使用桶排序算法將數(shù)組{ 21,3,30,44,15,36,6,10,9,19,25,48,5,23,47 }進(jìn)行升序排序。

在這里插入圖片描述

實(shí)現(xiàn)代碼如下所示。

#include<iostream>
using namespace std;
#include<algorithm>

void BubbleSort(int arr[], int len)
{
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = 0; j < len - i - 1; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				std::swap(arr[j], arr[j + 1]);
			}
		}
	}
}

void BucketSort(int* arr, int len) 
{

	int bucket[5][5];  //分配5個(gè)桶
	int bucketsize[5];  //每個(gè)桶中元素個(gè)數(shù)的計(jì)數(shù)器

	//初始化桶和桶計(jì)數(shù)器
	memset(bucket, 0, sizeof(bucket));
	memset(bucketsize, 0, sizeof(bucketsize));

	for (int i = 0; i < len; i++)  //把數(shù)組中的數(shù)據(jù)放入桶中
	{
		bucket[arr[i] / 10][bucketsize[arr[i] / 10]++] = arr[i];
	}

	for (int i = 0; i < len; i++)  //對(duì)每個(gè)桶中的數(shù)據(jù)進(jìn)行排序
		BubbleSort(bucket[i],bucketsize[i]);

	int k = 0;
	for (int i = 0; i < 5; i++)
	{
		for (int j = 0; j < bucketsize[i]; j++)
		{
			arr[k++] = bucket[i][j];  //將每個(gè)桶中的元素填充到數(shù)組中去
		}
	}
}

int main() 
{
	int a[] = { 21,3,30,44,15,36,6,10,9,19,25,48,5,23,47 };
	int len = sizeof(a) / sizeof(a[0]);

	cout << "排序前:" << endl;
	for (int i = 0; i < len; i++)
	{
		cout << a[i] << "  ";
	}
	cout << endl;

	BucketSort(a, len);

	cout << "排序后:" << endl;
	for (int i = 0; i < len; i++)
	{
		cout << a[i] << "  ";
	}
	cout << endl;

	system("pause");
	return 0;
}

排序前:
21 3 30 44 15 36 6 10 9 19 25 48 5 23 47
排序后:
3 5 6 9 10 15 19 21 23 25 30 36 44 47 48

時(shí)間復(fù)雜度: O ( n + k ) O(n+k) O(n+k)。

空間復(fù)雜度: O ( n + k ) O(n+k) O(n+k)。

穩(wěn)定性: 穩(wěn)定。

到此這篇關(guān)于Java排序算法之桶排序算法解析的文章就介紹到這了,更多相關(guān)Java桶排序算法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • IDEA插件指南之Mybatis?log插件安裝及使用方法

    IDEA插件指南之Mybatis?log插件安裝及使用方法

    這篇文章主要給大家介紹了關(guān)于IDEA插件指南之Mybatis?log插件安裝及使用的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-02-02
  • Kotlin 中安全地處理可空類(lèi)型的方式

    Kotlin 中安全地處理可空類(lèi)型的方式

    在 Kotlin 中,可空類(lèi)型(如String?)是語(yǔ)言設(shè)計(jì)的核心特性之一,旨在從編譯時(shí)避免 NullPointerException(NPE),這篇文章主要介紹了Kotlin 中該如何安全地處理可空類(lèi)型,需要的朋友可以參考下
    2025-05-05
  • Java中的鎖ReentrantLock詳解

    Java中的鎖ReentrantLock詳解

    這篇文章主要介紹了Java中的鎖ReentrantLock詳解,ReentantLock是java中重入鎖的實(shí)現(xiàn),一次只能有一個(gè)線(xiàn)程來(lái)持有鎖,包含三個(gè)內(nèi)部類(lèi),Sync、NonFairSync、FairSync,需要的朋友可以參考下
    2023-09-09
  • 排序算法圖解之Java冒泡排序及優(yōu)化

    排序算法圖解之Java冒泡排序及優(yōu)化

    冒泡排序即通過(guò)對(duì)待排序的序列從前往后,依次比較相鄰元素的值,若發(fā)現(xiàn)逆序則交換位置,使較大的元素逐漸移動(dòng)到后部。本文通過(guò)圖片和示例介紹了冒泡排序的實(shí)現(xiàn)及優(yōu)化,需要的可以參考一下
    2022-11-11
  • Java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(使用數(shù)據(jù)庫(kù))

    Java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(使用數(shù)據(jù)庫(kù))

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),使用數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Maven中央倉(cāng)庫(kù)發(fā)布的實(shí)現(xiàn)方法

    Maven中央倉(cāng)庫(kù)發(fā)布的實(shí)現(xiàn)方法

    最近做了個(gè)項(xiàng)目,希望能夠上傳到maven中央倉(cāng)庫(kù),給更多的人使用,于是就產(chǎn)生了這次項(xiàng)目發(fā)布經(jīng)歷。感興趣的可以一起來(lái)參考一下
    2021-06-06
  • java:無(wú)法訪(fǎng)問(wèn)org.springframework.boot.SpringApplication的解決方法

    java:無(wú)法訪(fǎng)問(wèn)org.springframework.boot.SpringApplication的解決方法

    這篇文章主要給大家介紹了關(guān)于java:無(wú)法訪(fǎng)問(wèn)org.springframework.boot.SpringApplication的解決方法,文中通過(guò)實(shí)例代碼將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • Java多線(xiàn)程實(shí)戰(zhàn)之單例模式與多線(xiàn)程的實(shí)例詳解

    Java多線(xiàn)程實(shí)戰(zhàn)之單例模式與多線(xiàn)程的實(shí)例詳解

    今天小編就為大家分享一篇關(guān)于Java多線(xiàn)程實(shí)戰(zhàn)之單例模式與多線(xiàn)程的實(shí)例詳解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • java中復(fù)雜查詢(xún)sql語(yǔ)句該怎么寫(xiě)

    java中復(fù)雜查詢(xún)sql語(yǔ)句該怎么寫(xiě)

    我們知道在java連接數(shù)據(jù)庫(kù)之后,需要數(shù)據(jù)庫(kù)的sql語(yǔ)句,下面這篇文章主要給大家介紹了關(guān)于java中復(fù)雜查詢(xún)sql語(yǔ)句該怎么寫(xiě)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • java實(shí)現(xiàn)python session功能代碼實(shí)例

    java實(shí)現(xiàn)python session功能代碼實(shí)例

    這篇文章主要介紹了java實(shí)現(xiàn)python session功能代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11

最新評(píng)論

汉川市| 荥经县| 搜索| 阜阳市| 崇左市| 贵州省| 六枝特区| 巩留县| 探索| 外汇| 宁陕县| 八宿县| 饶平县| 秭归县| 吉木乃县| 云林县| 隆回县| 通许县| 渭源县| 邵东县| 轮台县| 新化县| 和硕县| 怀远县| 读书| 米林县| 浦东新区| 谷城县| 舞阳县| 平武县| 葫芦岛市| 黄龙县| 盖州市| 化德县| 抚远县| 建湖县| 潍坊市| 西畴县| 尼勒克县| 秀山| 陇南市|