算法基础之三种排序算法

1.桶排序

先把数组中的所有数记为0,然后哪个数据多出现一次,数组中的哪个量就+1
缺陷
1:要提供多个空间存放数据,不方便,浪费了空间

2中间存在两个量,一个限定了输入数字的大小,一个限定了输入数据的数量

void main()
{
	int a[11],i, j, t;
	for (i = 0; i <11; i++)//定义数组中的a[i]为0
	{
		a[i] = 0;
	}
	for (i = 1; i <= 5; i++)//由于这里是对数组进行操作,所以初始值为1,循环读入数据
	{
		scanf_s("%d", &t);
		a[t]++;//当输入一个数据时,对应在数组中的位置计数+1
	}
	for (i = 0 ;i < 11; i++)//依次判断a[0]到a[10]
	
		for (j = 1; j <= a[i]; j++)//出现了几次就打印几次
		
			printf("%3d", i);
		
	
	system("pause");

2.冒泡排序

采用双重循环,使用一个变量用于交换前后两个数,同时可以采用宏定义;
与此相同的还有选择排序法

但是冒泡排序法算法时间复杂度为O(n^2),节省了空间却浪费了时间

#define N 5
void main()
{
	int i, j, a[N],t;
	
	for (i = 0; i < N; i++)
	{
		scanf_s("%d", &a[i]);
	}
		for (i = 0; i < N-1; i++)
		{
			for (j = 0; j < N - 1 - i; j++)
			{
				if (a[j] > a[j + 1])
				{
					t = a[j];
					a[j] = a[j + 1];
					a[j + 1] = t;
					
				}
			}
		}
		for (i = 0; i < N; i++)
		{
			printf("%3d", a[i]);
		}
		system("pause");
}

3.快速排序

快速排序法:设置基准数,经过系列操作,使得基准数两端的数要不小于该基准数,要不大于

其实快速排序法就是二分法和递归的综合

int a[11], n;
void quicksort(int left, int right)
{
	int  i, j, t, temp;
	if (left > right)
		return;
	temp = a[left];//temp中存放的是基准数
	i = left;
	j = right;
	while (i != j)
	{
		
		while (a[j] >= temp&&i < j)//从右向左寻找
			j--;
		while (a[i] <= temp&&i < j)//从左向右寻找
			i++;
		if (i < j)//交换两个数的位置
		{
			t = a[i];
			a[i] = a[j];
			a[j] = t;
		}
	}
	/*基准数归位*/
	a[left] = a[i];
	a[i] = temp;
	quicksort(left,i-1);//处理左值
	quicksort(i + 1, right);//处理右值
	return;


}
void main()
{
	
int i, j;
int len;
printf("请输入排列数的数量");
scanf_s("%d", &len);
printf("请输入基准点的数值\n");
scanf_s("%d", &n);//定义基准点
for (i = 1; i <=len; i++)
{
	scanf_s("%d", &a[i]);
}
quicksort(1, n);//快速排序
for (i = 1; i <=len; i++)//输出结果
{
printf("%3d", a[i]);
}
system("pause");
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值