由于上次的桶排序占用空间太多,这次又有了一个新的办法
直接上代码:
#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]