6种面试排序算法及排序算法稳定性
算法稳定性:如果在原序列中,有ri=rj,且排序过后ri和rj的位置保持不变,则说明算法是稳定的,例如在a[10]={1,2,3,4,5,5,6,7,8,9}中,经过排序后大5和小5位置互换,则为不稳定算法,不交换则为稳定算法。
1.直接插入排序
直接插入排序基本思想是,在一个数组array[]中,初始有序区为array[1],array[2……n]为无序区,从i=2开始直到数组结束,依次把数组中的元素插入到有序区array[1……i-1]中.
例如在a[10]={12,2,13,4,25,5,6,17,8,9}中,有序区为{12},然后扫描i=2的2,判断后放入有序区有{2,12}……i=3{2,12,13}……array[10]={2,4,5,6,8,9,12,13,17,25};
算法:
void insert_sort(int *array,int n)
{
for(int i=1;i<n;i++)
{
//此时认为前面的数组是已经排好序的
temp=a[i];
for(j=i-1;temp<a[j]&&j>0;j--)
{
a[j+1]=a[j];
}
a[j+1]=temp;
}
}
希尔排序