简述
直接插入排序(Straight Insertion Sort )是一种最简单的排序方法。它的基本操作是将一个记录插入到一个长度为 m (假设)的有序表中,使之仍保持有序,从而得到一个新的长度为 m + 1 的有序表。
算法思路
设有一组关键字{K 1 , K 2 ,…, K n};排序开始就认为 K 1 是一个有序序列;让 K 2 插入上述表长为 1 的有序序列,使之成为一个表长为 2 的有序序列;然后让 K 3 插入上述表长为 2 的有序序列,使之成为一个表长为 3 的有序序列;以此类推,最后让 K n 插入上述表长为 n-1 的有序序列,得一个表长为 n 的有序序列。
代码
#include <QDebug>
#include <QApplication>
void mDebug(int a[], int len)
{
QString str;
for (int i = 0; i < len; i++)
{
str += QString("%1 ").arg(a[i]);
}
qDebug() << str;
}
template<class T>
void StraightInsertionSort(T a[],int len)
{
// 进行len-1趟插入
for (int i = 1; i < len; i++)
{
int j = i;
T temp = a[i];
while (j > 0 && temp < a[j - 1])
{
a[j] = a[j - 1];
j--;
}
a[j] = temp;
}
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
int s[] = {50, -1, 3, 4, 0, 5, 1000, 6, 7, 12, 8, 1, 2, 9, -530, 450, 77} ;
int len = sizeof(s)/sizeof(s[0]);
StraightInsertionSort(s, len);
mDebug(s, len);
return a.exec();
}
输出
"-530 -1 0 1 2 3 4 5 6 7 8 9 12 50 77 450 1000 "