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;

}

}

希尔排序

posted @ 2014-04-06 16:32  Lora_wen  阅读(200)  评论(0编辑  收藏  举报