三下五除二带你初学C语言(10)——排序算法

12 篇文章 0 订阅
10 篇文章 1 订阅

1.桶排序
这种方法非常简单,但是浪费的空间比较多
在这里插入图片描述

//桶排序
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
	int m[8] = { 3,12,24,56,54,78,93,11 };
	int a[10], b[40], c[50];
	int i;
	for (i = 0; i < 8; i++)
	{
		if (m[i] >=0 && m[i] < 11)
			a[m[i]-1] = 1;
		if (m[i] >=11 && m[i]<=50 )
			b[m[i]-10-1] = 1;
		if (m[i] > 50 && m[i] <= 100)
			c[m[i] - 50-1] = 1;
	}
	for (i = 0; i < 8; i++)
	{
		printf("%4d", m[i]);
	}
	cout << endl;
	for (i = 0; i < 10; i++)
		if (a[i] == 1)
			printf("%4d", i+1);
	for (i = 0; i <=40; i++)
		if (b[i] == 1)
			printf("%4d", i + 10+1);
	for (i = 0; i <=50; i++)
		if (c[i] == 1)
			printf("%4d", i + 50+1);

	system("pause");
}

在这里插入图片描述
2.冒泡排序
在这里插入图片描述

//冒泡排序
#include <stdio.h>
#include <iostream>
using namespace std;
void MaoPao(int m[], int length)
{
	int i, j, t;
	bool temp;
	for (i = 0; i < 8 - 1; i++)
	{
		temp = true;
		for (j = 0; j < 8 - i - 1; j++)//后面最大的已排序,无需再排
		{
			if (m[j] > m[j + 1])
			{
				t = m[j];
				m[j] = m[j + 1];
				m[j + 1] = t;
				temp = false;
			}
		}
		if (temp)      //对冒泡排序进行改进
			return;
	}
}
int main()
{
	int m[8] = { 0,12,24,21,54,78,90,91 };
	int length=8,i;
	MaoPao(m, length);
	for(i=0;i<8;i++)
	{
		printf("%4d", m[i]);
	}
	system("pause");
}

3.快速排序
在这里插入图片描述

//排快速序
#include <stdio.h>
#include <iostream>
using namespace std;
void sort(int m[],int l,int r)
{
	int i = l, j = r;
	int temp = m[i];
	if (l > r)   return;
	while (i != j)
	{
		while (m[j] >= temp && j > i)
			j--;
		if (j > i)
			m[i] = m[j];
		while (m[i] <= temp && i < j)
			i++;
		   m[j] = m[i];
	}
	m[i] = temp;
	sort(m, l, i - 1);
	sort(m, i + 1, r);	
}
int main()
{
	int m[7] = {1,4,2,9,6,6,7};
	int i;
	sort(m, 0, 6);
	for(i=0;i<8;i++)
	{
		printf("%4d", m[i]);
	}
	system("pause");
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值