写一个排序函数接口,完成对整数和小数的排序。并且利用缺省参数的方式传入排序规则

  1. 写一个排序函数接口,能完成对整数和小数的排序
  2. 接口中多传入一个缺省参数。如果不指定就是用A排序方式,指定了就按传入的排序方式

首先我们实现一个排序函数接口,既能完成对整数的排序,又能完成对小数的排序。
这里用到的知识其实是函数重载,相同的函数,传入的参数不同,分别处理不同的数据。
用到的排序方法是插入排序。
插入排序

#include <iostream>

using namespace std;

void InsertSort(int * src, int n)
{
	int i, j;
	int tmp;

	for (i = 1; i < n; ++i)
	{
		tmp = src[i];

		for (j = i; j > 0 && src[j - 1] > tmp; --j)
		{
			src[j] = src[j - 1];
		}

		src[j] = tmp;
	}
}

void InsertSort(float * src, int n)
{
	int i, j;
	float tmp;

	for (i = 1; i < n; ++i)
	{
		tmp = src[i];

		for (j = i; j > 0 && src[j - 1] > tmp; --j)
		{
			src[j] = src[j - 1];
		}

		src[j] = tmp;
	}
}

int main()
{
	int a[5] = { 5, 1, 4, 2, 3 };
	float b[5] = { 8.2, 1.7, 3.5, 2.6, 4.8 };

	InsertSort(a, 5);
	InsertSort(b, 5);

	for (auto & i : a)
	{
		cout << i << ' ';
	}

	cout << endl;

	for (auto & i : b)
	{
		cout << i << ' ';
	}

	cout << endl;

	system("pause");
	return 0;
}

接下来我们在接口中多传入一个缺省参数,如果不指定就是用A排序方式,传入了就按传入的方式排序。
下面提供一个示例,加入了希尔排序的方法
希尔排序

#include <iostream>

using namespace std;

void InsertSort(int * src, int n)
{
	int i, j;
	int tmp;

	for (i = 1; i < n; ++i)
	{
		tmp = src[i];

		for (j = i; j > 0 && src[j - 1] > tmp; --j)
		{
			src[j] = src[j - 1];
		}

		src[j] = tmp;
	}
}

//希尔排序
void shellSort(int* src, int n)
{
	int i, j, k;
	int gap;
	int tmp;

	for (gap = n / 2; gap; gap /= 2)
	{
		for (k = 0; k < gap; ++k)
		{
			//插入排序
			for (i = gap + k; i < n; i += gap)
			{
				tmp = src[i];

				for (j = i; j >= gap && src[j - gap] > tmp; j -= gap)
				{
					src[j] = src[j - gap];
				}

				src[j] = tmp;
			}
		}
	}
}


void Sort(int * src, int n, int flag = 0)
{
	switch (flag)
	{
	case 0:
		InsertSort(src, n);
		break;
	case 1:
		shellSort(src, n);
		break;
	}

}

int main()
{
	int src[11] = { 1, 3, 6, 7, 9, 2, 4, 8, 10, 5, 11 };

	//Sort(src, 11);
	Sort(src, 11, 1);

	for (auto & i : src)
	{
		cout << i << ' ';
	}

	cout << endl;

	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值