五、排序算法之简单算法——冒泡排序、简单选择排序和直接插入排序

废话不多说,先来个笑话(声明笑话转载):

最近的国际局势就像这样,美帝喊:有种放学别走!

乌克兰大叫:老子喊人揍死你。
欧盟嚷嚷道:下课就动手!!

普大帝冷冷的说:放学了啊,到底打不打我呀,不打我走了。


进入正题,学算法不可能不提排序,排序算法主要分为:简单算法和改进算法,前者主要有冒泡排序、简单选择排序和直接插入排序;后者主要有希尔排序(改进自直接插入排序)、堆排序(改进自简单选择排序)、归并排序(改进自堆排序)和快速排序(改进自冒泡排序)。

以下是鄙人用C++写的简单排序算法,各位看官请指正:

#include <iostream>

using namespace std;
const int maxSize  = 10;//指定线性表初始长度

//先定义一个用于排序的顺序表结构
struct myList
{
	int r[maxSize];
	int length;
};

//交换线性表中两个数据值
void swap(myList *L, int i, int j)
{
	int temp = L->r[i];
	L->r[i] = L->r[j];
	L->r[j] = temp;
}

//开始编写冒泡排序算法
void bubbleSort(myList *L)
{
	int i(0),j(0);
	bool flag = true;
	for (i = 0; i < L->length && flag; i++)
	{
		flag = false;
		for (j = (L->length - 2); j >= i; j--)
		{
			if (L->r[j] > L->r[j+1])
			{
				swap(L,j,j+1);
				flag = true;
			}
		}
	}
}

//开始编写简单选择排序
void simpleChooseSort(myList *L)
{
	int i(0),j(0);
	int min;
	for ( i = 0; i < L->length; i++)
	{
		min = i;
		for (j = i +1; j < L->length; j++)
		{
			if (L->r[j] < L->r[min])
			{
				min = j;
			}
		}
		if (min != i)
		{
			swap(L,i,min);
		}
	}
}

//开始编写直接插入排序
void directInsertSort(myList *L)
{
	int i(0),j(0);
	for ( i = 0;i < (L->length - 1); i++)
	{
		if (L->r[i+1] < L->r[i])
		{
			int temp = L->r[i+1];
			for (j = i; L->r[j] > temp; j--)
			{
				L->r[j+1] = L->r[j];
			}
			L->r[j + 1] = temp;
		}
	}
}

//编写主函数测试
int main()
{
	//创建线性表并赋值
	myList *myL = new myList;
	myL->length = 9;
	for (int i = 0; i < myL->length; i++)
	{
		int temp(0);
		cout<<"请输入数组中第"<<(i+1)<<"个数据!"<<endl;
		cin>>temp;
		myL->r[i] = temp;
	}
	//调用简单排序算法
	//bubbleSort(myL);//冒泡排序
	//simpleChooseSort(myL);//简单选择排序
	directInsertSort(myL);//直接插入排序
	//输出排序结果
	cout<<"排序后数据如下:"<<endl;
	for (int i = 0; i < myL->length; i++)
	{
		cout<<myL->r[i]<<" ";
	}

	return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值