一、直接插入排序
#include<stdio.h>
#include<iostream>
using namespace std;
/*
10
9 8 7 5 4 1 2 6 2 4
*/
void InsertSort(int a[],int n)
{
int i,j;
int temp; //暂存器
for(i=1;i<n;i++)
{
temp=a[i]; //暂时存放当前要插入的数
for(j=i-1;j>=0&&a[j]>temp;j--)
{
a[j+1]=a[j];
}
a[j+1]=temp;
}
}
int main()
{
int a[100];
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
InsertSort(a,n);
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
时间复杂度O(n2) 稳定
二、希尔排序
#include<iostream>
using namespace std;
/*
10
9 8 7 5 4 1 2 6 2 4
*/
void ShellSort(int a[],int n)
{
int h;
for(h=n/2;h>0;h=h/2) //分组每次为上次分组的一半 最终为1
{
int i,j,temp;
for(i=h;i<n;i++) //对各个组插入排序 i++
{
temp=a[i];
for(j=i-h;j>=0&&a[j]>temp;j=j-h)
{
a[j+h]=a[j];
}
a[j+h]=temp;
}
}
}
int main()
{
int n;
cin>>n;
int a[100];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
ShellSort(a,n);
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
时间复杂度O(n1.3) 不稳定