桶排序和冒泡排序

#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
//桶排序,时间快但是费空间
int main()
{
	int book[1010];
	int n, t;
	cin >> n;
	fill(book, book + 1010, 0);
	for (int i = 0; i < n; i++)
	{
		cin >> t;
		book[t]++;
	}
//	for (int i = n; i > 0; i--)err
//	这里是从最大的数字开始遍历,而不是多少个数字!
	for(int i=1000;i>=0;i--)//从最大的数开始判断出现次数
		for (int j = 0; j < book[i]; j++)
			cout << i << " ";


	return 0;
}

//c语言+注释
#include <stdio.h> 
int main()
{
	int book[1001], i, j, t, n;
	for (i = 0; i <= 1000; i++)
		book[i] = 0;
	scanf("%d", &n);//输入一个数n,表示接下来有n个数
	for (i = 1; i <= n; i++)//循环读入n个数,并进行桶排序
	{
		scanf("%d", &t); //把每一个数读到变量t中
		book[t]++; //进行计数,对编号为t的桶放一个小旗子
	}
	for (i = 1000; i >= 0; i--) //依次判断编号1000~0的桶
		for (j = 1; j <= book[i]; j++) //出现了几次就将桶的编号打印几次
			printf("%d ", i);
	getchar(); getchar();
	return 0;
}


 冒泡核心算法

//冒泡排序,不过时间慢
 //冒泡排序的核心部分
for (i = 1; i <= n - 1; i++) //n个数排序,只用进行n-1趟
{
	for (j = 1; j <= n - i; j++) //从第1位开始比较直到最后一个尚未归位的数,想一想为什么到n - i就可以了。
	{
	if (a[j] < a[j + 1]) //比较大小并交换
	{
	t = a[j]; a[j] = a[j + 1]; a[j + 1] = t;
 }
	}
}
//总结:假设为倒序。
//每次都是从第一位开始一直比对前后两个数,交换,一直传递到最后,一定能够确定最小的的数
//所以每一次都交换,把相对小的数放在最后面,完成排序。
//而已经放好的数,就不必要再判断了,所以是n-i;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值