- 写一个排序函数接口,能完成对整数和小数的排序
- 接口中多传入一个缺省参数。如果不指定就是用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;
}