1. 程式人生 > 其它 >基數排序(C++實現)

基數排序(C++實現)

技術標籤:C++資料結構c++排序演算法

基數排序

#include <iostream>
#include <list>

using namespace std;

int maxdigit(int data[], int n)
{
	int d = 1;  // 計位器: 1 1位數 2 兩位數
	int p = 10; // 倍數
	// 求陣列中最高位的的位數
	for (int i = 0; i < n; ++i)
	{
		while (data[i] >= p)
		{
			p *= 10;
			++d;
		}
	}		
	cout <<
"maxdigit:" << d << endl; // 返回最高位的位數 return d; } void radixsort(int data[], int n) { // 獲取最高位的位數 int digits = maxdigit(data, n); list<int> lists[10]; int d, j, k, factor; for(d = 1, factor=1; d<= digits; factor*=10, d++) { for(j = 0; j < n; j++) { lists[
(data[j]/factor) %10].push_back(data[j]); } for(j = k = 0; j < 10; j++) { while(!lists[j].empty()) { data[k++] = lists[j].front(); lists[j].pop_front(); } } // cout << "中間結果:" << endl; // for(int m = 0; m < n; m++) // cout << data[m] << " ";
// cout << endl; } } int main() { int data[10] = {179, 208, 306, 93, 859, 984, 55, 9, 271, 33}; radixsort(data, 10); cout << "排序後結果:" << endl; for (int i = 0; i < 10; i++) cout << data[i] << " "; cout << endl; cout << "test" << endl; return 0; }