直接插入排序算法

直接插入排序算法(用于理解)

一个带排序数组    array[]     元素个数 size = array.length

两个指针表示元素位置    int i 和 int j

  i 表示待排序元素的位置  ,   j 和 i 相等,为了表示已经排好序的元素位置

快树排序就是把一个待排元素排进已排好的队列中,因此需要两层循环

第一层循环 for( i = 1;i < size;i++)   i 表示待排元素的位置,从第二个元素开始所以 i 初始化为1

  循环内部设置 int temp = array[i] ;

  再设置 j = i;  因为这层循环每完成一次,已经排好序的元素就多一个。(为什么j=i 而不是 j = i-1 ,也可以那么赋值,看个人喜好。主要就是表述已经排序好的最后一个元素的位置)

第二层循环为找到插入位置  while( j-1 >= 0 && array[j-1] > temp)  表示如果前面还有比 temp 小的元素就继续循环

  循环内部开始排序   array[j] = array[j-1];   将比 temp 大的那个元素与 temp 交换

  前面还有元素     j -- ;  前面还有没比较的元素

到此算法完成

void InsertSort(T* array, int n) {              
	int i, j;                                   
	T temp;                                      /
	for (i = 1; i < n; i++) {                    //待排序元素位置
		j = i;
		temp = array[i];                         
		while (j-1 >= 0 && temp < array[j - 1]) {       //寻找插入位置
			array[j] = array[j - 1];             
			j--;                                 
		}
		array[j] = temp;                       //也可以写在第二层循环内部。但可以分离出来,也算是提高计算性能。
	} 

  

总的来说就是 i 记录待排序的元素位置(第一层循环i++),需要将待排序元素与前一个元素比较,若i前还有比它小的元素则继续比较(第二层循环 j--)

要熟记直接插入排序算法,因为其他插入排序也也会用到直接插入排序

原文地址:https://www.cnblogs.com/yinniora/p/11958543.html