直接插入排序(insert-sort)
基本思想:在一组有序的数据序列中,插入数据,仍然要求插入后此数据序列是仍然有序的。适用于少量数据的排序。
平均时间复杂度:O(n2)
最好时间复杂度:O(n)
最坏时间复杂度:O(n2)
稳定性:稳定排序
算法实现的步骤:
假设有一组待排序的数据序列a,长度为10:
位置(i): 0 1 2 3 4 5 6 7 8 9
初始序列: 60 34 24 11 67 45 98 111 10 3
第一趟: 34 60 24 11 67 45 98 111 10 3
第二趟: 24 34 60 11 67 45 98 111 10 3
第三趟: 11 24 34 60 67 45 98 111 10 3
第四趟: 11 24 34 60 67 45 98 111 10 3
第五趟: 11 24 34 45 60 67 98 111 10 3
第六趟: 11 24 34 45 60 67 98 111 10 3
第七趟: 11 24 34 45 60 67 98 111 10 3
第八趟: 10 11 24 34 45 60 67 98 111 3
第九趟: 3 10 11 24 34 45 60 67 98 111
思路为:第一个元素a[0]为有序,将第二个元素a[1]插入前面一个元素a[0],再将第三个元素a[2]插入到a[0]、a[1]当中,以此类推,第k个元素a[k] 插入到前k-1个元素中,且前k-1个元素a[0]、a[1]…a[k-1]为有序序列,因此可以得到有序数组。
平均时间复杂度:O(n2)
最好时间复杂度:O(n)
最坏时间复杂度:O(n2)
代码实现方法
C语言版:
void insert_sort(int arr[],int n)
{
int tmp,flag;
int i,j;
for(i=1;i<n;i++)
{
tmp=arr[i];
flag=i;
for(j=i-1;j>=0;j--)
{
if(tmp<arr[j])
arr[flag--]=arr[j];
else
break;
}
arr[flag]=tmp;
}
}
C++语言版:
template<classT>
void insert_sort(T arr[],int n)
{
int i,j;
for(i=1;i<n;i++)
{
T tmp=arr[i];
for(j=i;j>0 &&tmp<arr[j-1];j--)
arr[j]=arr[j-1];
arr[j]=tmp;
}
}
Python版:
#!/usr/bin/python
definsert_sort(arr): ##定义的函数
for i in range(1,len)
tmp=arr[i]
j=i
while j>0 and tmp<arr[j-1]
arr[j]=arr[j-1]
j-=1
arr[j]=tmp
Shell版本:
#!/usr/bin/bash
read–a arr
for((i=1;i<${#arr[@]};i++))
do
tmp=${arr[i]}
for((j=i;j>0 && $tmp<${arr[j-1]};j--))
do
arr[j]=${arr[j-1]}
done
arr[j]=$tmp
done
for((i=0;i<${#arr[@]};i++))
do
echo ${arr[i]}
done