几种常见的Sort排序算法
1. 排序的基本概念
有n个记录的序列,其相应关键字的序列是,相应的下表序列是。通过排序,要求找出当前下标序列的一种排列,使得相应的关键字满足如下的非递减(或非递增)关系:,这样就得到一个按关键字有序的记录序列。该文主要是以升序为例。
2. 排序的分类
常见的Sort排序可分为如下几种:
3. 几种排序算法的具体介绍与实现
(1)直接插入排序
插入排序的基本思想是:在一个已排好序的记录子集的基础上,每一步将下一个待排序的记录有序插入到已排好序的记录子集中,直到将所有待排记录全部插入为止。
直接插入排序的算法思想是:将第i个记录插入到前面的i-1个已排好序的记录中。
具体过程为:将第i个记录的关键字,顺序与其前面记录的关键字进行比较,将所有关键字大于的记录依次向后移动一个位置,直到遇到一个关键字小于或等于的记录,此时该记录后面一定有空位置,将第i个记录插入到该空位置即可。
代码实现:
#include
#include
using namespace std;
void Printf(int* a,size_t n)
{
for (size_t i = 0; i < n; ++i)
{
cout << a[i] << " ";
}
cout << endl;
}
void InsertSort(int* a, size_t n)
{
assert(a);
for (int i = 0; i < n - 1; ++i)
{
int end = i;
int tmp = a[end + 1];
for (; end >= 0; --end)
{
if (a[end] > tmp)
{
a[end + 1] = a[end];
}
else
{
break;
}
}
a[end + 1] = tmp;
}
}
void TestInsertSort()
{
int a[] = { 2, 5, 4, 9, 3, 6, 8, 7, 1, 0 };
Printf(a, sizeof(a) / sizeof a[0]);
InsertSort(a, sizeof(a) / sizeof a[0]);
Printf(a, sizeof(a) / sizeof a[0]);
}
(2)希尔排序
算法思想:希尔排序又称缩小增量排序法,是一种基于插入思想的排序方法,将待排序的关键字序列分为若干个较小的子序列,对子序列进行直接插入排序,使整个待排序列排好序。
可分为两步:(a)预排序
(b)插入排序