c++稍微复杂桶排序(未完待续~)

由于上次的桶排序占用空间太多,这次又有了一个新的办法

直接上代码:

#include <bits/stdc++.h>
using namespace std;
int n;
void bubble(double a[],int n)
{
	double t;
	for (int i = 0;i < n - 1;i ++)
	{
		for (int j = 0;j < n - i - 1;j ++)
		{
			if (a[j] > a[j + 1])
			{
				t = a[j];
				a[j] = a[j + 1];
				a[j + 1] = t;
			}
		}
	}
}
int main()
{
	double tong[10][10];
	cin >> n;
	double arr[10];
	for (int i = 0;i < n;i ++)
	{
		cin >> arr[i];
	}
	memset(tong,0,sizeof(tong));
	for (int i = 0;i < n;i ++)  //列  
	{
		int t = 10.0 * arr[i];
		tong[i][t] = arr[i];
	}
	for (int i = 1;i < 10;i ++)
	{
		int t = 10.0 * arr[i];
		bubble(tong[i][t],n);
	}
	for (int i = 0;i < 10;i ++)
	{
		for (int j = 0;j < 10;j ++)
		{
			if (tong[i][j] > 0)
			{
				printf("%.2lf ",tong[i][j]);
			}
		}
		continue;
	} 
	cout << endl;
	return 0;
}
/*
10
0.78 0.17 0.39 0.26 0.72 0.94 0.21 0.12 0.23 0.68
*/

运行结果:

主要思路

基本类似于分治思想就是把一个规模为N的问题分解为K个规模较小的问题,这些子问题相互独立且与原问题性质相同,求出子问题的解就可以得到原问题的解。流程如下:
1、建立好对应的桶
2、把要排序的数组分别放入对应的桶中
3、统计元素在桶中出现的次数
4、按照桶的顺序输出同理的元素

这个代码还不完整,不能做到排序

未完待续~
参考视频:[https://www.bilibili.com/video/av17940595?from=search&seid=5095049522483939948]

原文地址:https://www.cnblogs.com/LJA001162/p/11097808.html