排序算法总结---直接插入排序
2014-12-04 11:08
274 查看
直接插入排序的过程是:
1.将整个待排序的记录序列划分成有序区和无序区,初始时有序区为待排序记录序列中的第一个记录,无序区包括所有剩余待排序的记录;
2.将无序区的第一个记录插入到有序区的合适位置中,从而使无序区减少一个记录,有序区增加一个记录;
3.重复执行第二步,直到无序区中没有记录为止。
第一步的解决:
将第一个记录看成是初始有序区,然后从第二个记录起依次插入到这个有序区中,直到将第len个记录插入完毕,算法描述为:
第二步的解决:
一般情况下,在i-1个记录的有序区array[0]~array[i-1]中插入一个记录array[i]时,首先要查找array[i]的正确插入位置。最简单的,可以采用顺序查找。将array[i]的值给一个临时变量temp。在自i-1起往前查找的过程中,同时后移记录。
退出循环,说明找到了插入的位置,因为array[j]刚刚比较完毕,所以,j+1为正确的插入的位置,将待插记录插入到有序表中。即:
算法和测试代码如下:
直接插入排序的最好的时间复杂度为O(n),最差和平均的时间复杂度为O(n*n),空间复杂度为O(1)
直接插入排序是一种稳定的排序的方法。
适用:
当序列中的记录基本有序或者待排序记录较少时,它是最佳的排序的方法。
1.将整个待排序的记录序列划分成有序区和无序区,初始时有序区为待排序记录序列中的第一个记录,无序区包括所有剩余待排序的记录;
2.将无序区的第一个记录插入到有序区的合适位置中,从而使无序区减少一个记录,有序区增加一个记录;
3.重复执行第二步,直到无序区中没有记录为止。
第一步的解决:
将第一个记录看成是初始有序区,然后从第二个记录起依次插入到这个有序区中,直到将第len个记录插入完毕,算法描述为:
for(i=1;i<len;i++) { //插入第i个记录 }
第二步的解决:
一般情况下,在i-1个记录的有序区array[0]~array[i-1]中插入一个记录array[i]时,首先要查找array[i]的正确插入位置。最简单的,可以采用顺序查找。将array[i]的值给一个临时变量temp。在自i-1起往前查找的过程中,同时后移记录。
int temp = array[i]; for (j = i - 1; j>=0&&temp< array[j]; j--) array[j + 1] = array[j]; array[j + 1] = temp;
退出循环,说明找到了插入的位置,因为array[j]刚刚比较完毕,所以,j+1为正确的插入的位置,将待插记录插入到有序表中。即:
array[j + 1] = temp;
算法和测试代码如下:
#include <iostream>
#include <cstdlib>
using namespace std;
void InsertSort(int *array, int len)
{
if (array == NULL || len<0)
{
return;
}
int i, j;
for (i = 1; i < len;i++)
{
int temp = array[i]; for (j = i - 1; j>=0&&temp< array[j]; j--) array[j + 1] = array[j]; array[j + 1] = temp;
}
}
void show(int *array, int len)
{
for (int i = 0; i < len;i++)
{
cout << array[i] << " ";
}
cout << endl;
}
void main()
{
int array[] = {7,6,5,4,3,2,1,-1};
int len = sizeof(array) / sizeof(array[0]);
InsertSort(array, len);
show(array, len);
system("pause");
}
直接插入排序的最好的时间复杂度为O(n),最差和平均的时间复杂度为O(n*n),空间复杂度为O(1)
直接插入排序是一种稳定的排序的方法。
适用:
当序列中的记录基本有序或者待排序记录较少时,它是最佳的排序的方法。
相关文章推荐
- 数据结构与算法:七种排序算法总结(冒泡排序、选择排序、直接插入排序、希尔排序、堆排序、归并排序、快速排序)
- 排序算法总结(冒泡排序、直接插入排序、希尔排序)(python实现)
- 排序算法总结(一)---- 直接插入排序,希尔排序(java实现)
- 【排序算法总结】直接插入排序
- 排序算法总结之直接插入排序
- 排序算法总结---直接插入排序
- java排序算法之直接插入排序
- 插入排序算法--直接插入算法,折半排序算法,希尔排序算法(C#实现)
- 【数据结构】排序算法(一)之直接插入排序,冒泡排序
- 【排序算法】直接插入排序与希尔(Shell)排序
- 排序算法(堆排序,归并排序,快速排序、选择排序、直接插入排序)
- 八大排序算法总结 1-直接插入排序
- 排序算法之直接插入排序(JAVA)
- 排序算法: 冒泡排序, 快速排序,希尔排序,直接插入排序 ,直接选择排序,归并排序,堆排序
- 常用算法总结之排序(七)---直接插入排序
- 排序算法(1) —— 直接插入排序及其改进
- 直接插入排序算法知识总结
- 排序算法总结2-直接选择排序
- 排序算法之直接插入排序
- 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序