一:插入排序
排序原理
(1)插入排序是这样说的,对已经有序的序列进行插入
(2)它是从第二个数据开始,与前面的数据进行比较,找到确切的位置进行插入
(3)比如有一个数组num[5]={1,2,4,5,3},按照升序排列,我们就需要将3插入到2和4之间,那么4,5就要统一往后挪一个位置,然后把3放到num[1]的位置
代码示例
//插入排序
//{12,45,56,78,45,15,14,54,5,45,1,23}
//对以上数组排序
#include <iostream>
using namespace std;
void print(int num[],int n)
{
for(int i=0;i<n;i++)
{
cout<<num[i]<<" ";
}
cout<<'\n';
}
int main()
{
int num[12]={12,45,56,78,45,15,14,54,5,45,1,23};
int i,j;
int flag;//哨,记录已排序数据右边的数据,即要插入的数据
for(i=0;i<12;i++)
{
j=i+1;
flag=num[j];//记录要插入的值
while(flag>num[j-1]&&j!=0)
{
num[j]=num[j-1];
j--;
}
num[j]=flag;
}
print(num,12);
cout << "Hello world!" << endl;
return 0;
}
插入排序的优化方式有很多,二分查找啥的,还有下面的希尔排序,这里就不在优化了。
二:希尔排序
排序原理
(1)对一组数据按照某间隔分组再插入排序
(2)间隔的选取即增量的选取,即每次间隔几个选取元素作为一组
(3)间隔按照size/2选取,size每次/=2
代码示例
//希尔排序,也是优化后的插入排序
//{12,45,56,78,45,15,14,54,5,45,1,23}
//对以上数组排序
#include <iostream>
using namespace std;
void print(int num[],int n)//打印数组
{
for(int i=0; i<n; i++)
{
cout<<num[i]<<" ";
}
cout<<'\n';
}
int main()
{
int num[13]= {12,45,78,65,45,15,14,65,54,5,45,1,23};
print(num,13);//打印初始数组
int interval=13/2;//间隔
int i,j;
while(interval>=1)
{
for(i=interval;i<13;i++)
{
int temp=num[i];
j=i-interval;
while(j>=0&&temp<num[j])
{
num[j+interval]=num[j];
j-=interval;
}
num[j+interval]=temp;
}
print(num,13);
interval/=2;
}
print(num,13);//打印排序后数组
cout << "Hello world!" << endl;
return 0;
}
以上就是插入排序和希尔排序,如有错误,请尽情指正