欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Bucket Sort桶排序算法及C++代碼實現(xiàn)示例

 更新時間:2016年07月06日 16:36:17   作者:skywangkw  
桶排序是一種線性排序算法,這里我們來詳解Bucket Sort桶排序算法及C++代碼實現(xiàn)示例,需要的朋友可以參考下

桶排序(Bucket sort)或所謂的箱排序,是一個排序算法,工作的原理是將數(shù)組分到有限數(shù)量的桶子里。每個桶子再個別排序(有可能再使用別的排序算法或是以遞歸方式繼續(xù)使用桶排序進行排序)。桶排序是鴿巢排序的一種歸納結(jié)果。當要被排序的數(shù)組內(nèi)的數(shù)值是均勻分配的時候,桶排序使用線性時間(Θ(n))。但桶排序并不是比較排序,他不受到O(n log n)下限的影響。

桶排序以下列程序進行:
1.設(shè)置一個定量的數(shù)組當作空桶子。
2.尋訪序列,并且把項目一個一個放到對應(yīng)的桶子去。
3.對每個不是空的桶子進行排序。
4.從不是空的桶子里把項目再放回原來的序列中。

桶排序圖文示例
桶排序代碼:

/*
 * 桶排序
 *
 * 參數(shù)說明:
 *   a -- 待排序數(shù)組
 *   n -- 數(shù)組a的長度
 *   max -- 數(shù)組a中最大值的范圍
 */
void bucket_sort(int a[], int n, int max)
{
  int i, j;
  int *buckets;

  if (a==NULL || n<1 || max<1)
    return ;

  // 創(chuàng)建一個容量為max的數(shù)組buckets,并且將buckets中的所有數(shù)據(jù)都初始化為0。
  if ((buckets=(int *)malloc(max*sizeof(int)))==NULL)
    return ;
  memset(buckets, 0, max*sizeof(int));

  // 1. 計數(shù)
  for(i = 0; i < n; i++) 
    buckets[a[i]]++; 

  // 2. 排序
  for (i = 0, j = 0; i < max; i++) 
    while( (buckets[i]--) >0 )
      a[j++] = i;

  free(buckets);
}

說明:
bucketSort(a, n, max)是作用是對數(shù)組a進行桶排序,n是數(shù)組a的長度,max是數(shù)組中最大元素所屬的范圍[0,max)。
假設(shè)a={8,2,3,4,3,6,6,3,9}, max=10。此時,將數(shù)組a的所有數(shù)據(jù)都放到需要為0-9的桶中。如下圖:

201676163024524.jpg (682×456)

在將數(shù)據(jù)放到桶中之后,再通過一定的算法,將桶中的數(shù)據(jù)提出出來并轉(zhuǎn)換成有序數(shù)組。就得到我們想要的結(jié)果了。

相關(guān)文章

  • C語言利用cJSON解析JSON格式全過程

    C語言利用cJSON解析JSON格式全過程

    cJSON是用于解析json格式字符串的一套api,非常好用,下面這篇文章主要給大家介紹了關(guān)于C語言利用cJSON解析JSON格式的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • C++靜態(tài)持續(xù)變量介紹

    C++靜態(tài)持續(xù)變量介紹

    這篇文章主要介紹了 C++靜態(tài)持續(xù)變量,靜態(tài)持續(xù)變量的定義C++和C語言是一樣的,它擁有三種鏈接性,即外部鏈接性、內(nèi)部連接性和無鏈接性。其中外部鏈接性指的是可以在其他文件中訪問,內(nèi)部鏈接性指的是只能在當前文件訪問,需要的朋友可以參考一下
    2021-11-11
  • C++實現(xiàn)LeetCode(199.二叉樹的右側(cè)視圖)

    C++實現(xiàn)LeetCode(199.二叉樹的右側(cè)視圖)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(199.二叉樹的右側(cè)視圖),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • VS2017+Qt5+Opencv3.4調(diào)用攝像頭拍照并存儲

    VS2017+Qt5+Opencv3.4調(diào)用攝像頭拍照并存儲

    本文主要介紹了VS2017+Qt5+Opencv3.4調(diào)用攝像頭拍照并存儲,實現(xiàn)了視頻,拍照,保存這三個功能。具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C語言讀寫配置文件的方法

    C語言讀寫配置文件的方法

    這篇文章主要介紹了C語言讀寫配置文件的方法,包括C語言讀寫ini配置文件所涉及的文件讀寫技巧,以及完整的源文件及頭文件實現(xiàn)方法,需要的朋友可以參考下
    2015-07-07
  • 淺析設(shè)計模式中的代理模式在C++編程中的運用

    淺析設(shè)計模式中的代理模式在C++編程中的運用

    這篇文章主要介紹了設(shè)計模式中的代理模式在C++編程中的運用,代理模式最大的好處就是實現(xiàn)了邏輯和實現(xiàn)的徹底解耦,需要的朋友可以參考下
    2016-03-03
  • 使用C語言實例描述程序中的內(nèi)聚和耦合問題

    使用C語言實例描述程序中的內(nèi)聚和耦合問題

    這篇文章主要介紹了用C語言實例描述程序中的內(nèi)聚和耦合,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • pcre函數(shù)詳細解析

    pcre函數(shù)詳細解析

    PCRE提供了19個接口函數(shù),為了簡單介紹,使用PCRE內(nèi)帶的測試程序(pcretest.c)示例用法
    2013-09-09
  • 從匯編看c++中的多態(tài)詳解

    從匯編看c++中的多態(tài)詳解

    下面小編就為大家?guī)硪黄獜膮R編看c++中的多態(tài)詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • C++中Cbitmap,HBitmap,Bitmap區(qū)別及聯(lián)系

    C++中Cbitmap,HBitmap,Bitmap區(qū)別及聯(lián)系

    這篇文章主要介紹了C++中Cbitmap,HBitmap,Bitmap區(qū)別及聯(lián)系的相關(guān)資料,需要的朋友可以參考下
    2015-06-06

最新評論