C語言基本排序算法之桶式排序?qū)嵗?/h1>
來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點擊: 次
本文實例講述了C語言基本排序算法之桶式排序。分享給大家供大家參考,具體如下:
桶式排序是對一個有n個整型元素的數(shù)組a[n],其中對任意i,0 <= a[i] <= m的特殊排序算法。
可以對 n==m, n != m分別處理。寫代碼時需要注意的的是a[i]是訪問第i-1個元素,而非第i個。
/************************************************************************************/
/* Bucket_Sort.h 桶式排序算法 */
/* 問題:對一個有n個整型元素a[0],a[1],…,a[n-1]的數(shù)組排序,其中0 <= a[i] <= m,任意i */
/* 程序:運(yùn)行時間為O(m+n),輔助空間為O(m) */
/* 當(dāng) n=m 時特殊處理,運(yùn)行時間為O(N), 輔助空間為O(1) */
/************************************************************************************/
#include <vector>
/*m != n */
void Bucket_Sort_m(int *a, int n, int m)
{
std::vector<int> temp(m,0);
int i;
for(i = 0; i != n; ++i) //遍歷a[]
++temp[a[i]-1]; //如果有對應(yīng)于下標(biāo)的值,標(biāo)記為1,否則為0
i = 0;
for(int j = 1; j <= m; ++j) //遍歷temp向量
if(temp[j-1]) a[i++] = j;
temp.clear();
}
/* m == n */
/* 最后的結(jié)果是a[i-1] = i */
void Bucket_Sort(int *a,int n)
{
for(int i = 1; i <= n; ++i)
{
while(a[i-1] != i)
{
int temp = a[a[i-1]-1];
a[a[i-1]-1] = a[i-1];
a[i-1] = temp;
}
/* 偽代碼:如果假設(shè)可以通過a[i]訪問數(shù)組的第i個元素,而不是第i-1個 */
/*while(a[i] != i)
{
int temp = a[a[i]];
a[a[i]] = a[i];
a[i] = temp;
}
*/
}
}
希望本文所述對大家C語言程序設(shè)計有所幫助。
本文實例講述了C語言基本排序算法之桶式排序。分享給大家供大家參考,具體如下:
桶式排序是對一個有n個整型元素的數(shù)組a[n],其中對任意i,0 <= a[i] <= m的特殊排序算法。
可以對 n==m, n != m分別處理。寫代碼時需要注意的的是a[i]是訪問第i-1個元素,而非第i個。
/************************************************************************************/ /* Bucket_Sort.h 桶式排序算法 */ /* 問題:對一個有n個整型元素a[0],a[1],…,a[n-1]的數(shù)組排序,其中0 <= a[i] <= m,任意i */ /* 程序:運(yùn)行時間為O(m+n),輔助空間為O(m) */ /* 當(dāng) n=m 時特殊處理,運(yùn)行時間為O(N), 輔助空間為O(1) */ /************************************************************************************/ #include <vector> /*m != n */ void Bucket_Sort_m(int *a, int n, int m) { std::vector<int> temp(m,0); int i; for(i = 0; i != n; ++i) //遍歷a[] ++temp[a[i]-1]; //如果有對應(yīng)于下標(biāo)的值,標(biāo)記為1,否則為0 i = 0; for(int j = 1; j <= m; ++j) //遍歷temp向量 if(temp[j-1]) a[i++] = j; temp.clear(); } /* m == n */ /* 最后的結(jié)果是a[i-1] = i */ void Bucket_Sort(int *a,int n) { for(int i = 1; i <= n; ++i) { while(a[i-1] != i) { int temp = a[a[i-1]-1]; a[a[i-1]-1] = a[i-1]; a[i-1] = temp; } /* 偽代碼:如果假設(shè)可以通過a[i]訪問數(shù)組的第i個元素,而不是第i-1個 */ /*while(a[i] != i) { int temp = a[a[i]]; a[a[i]] = a[i]; a[i] = temp; } */ } }
希望本文所述對大家C語言程序設(shè)計有所幫助。
欄 目:C語言
下一篇:C++ 網(wǎng)絡(luò)連通性檢測的實現(xiàn)方法
本文標(biāo)題:C語言基本排序算法之桶式排序?qū)嵗?/a>
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/1146.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對數(shù)怎么表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10delphi制作wav文件的方法
- 04-02jquery與jsp,用jquery
- 01-11ajax實現(xiàn)頁面的局部加載
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10C#中split用法實例總結(jié)
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文