第十九章 Caché 算法与数据结构 插入排序

文章目录

  • 第十九章 Caché 算法与数据结构 插入排序
  • 基本思想
  • 时间复杂度
  • 步骤
  • 完整代码
    • 插入类
    • 调用

第十九章 Caché 算法与数据结构 插入排序

基本思想

把n个待排序的元素看成一个有序表和一个无需表,开始的时候有序表只有1个元素,无序表中有n-1个元素

每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的有序表,重复n-1次完成整个排序过程。

时间复杂度

  • O(n^2)

步骤

  • 从第一个元素开始,该元素可以认为已经被排序;
  • 取出下一个元素,在已经排序的元素序列中从后向前扫描;
  • 如果该元素(已排序)大于新元素,将该元素移到下一位置;
  • 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
  • 将新元素插入到该位置后;
  • 重复步骤2~5。

完整代码

插入类

Class PHA.YX.Arithmetic.InsertSort Extends %RegisteredObject
{

Method sort(array As PHA.YX.Arithmetic.Array)
{
	#dim j as %Integer = 0
	
	/* 临时变量 */
	#dim temp as %Integer = 0
	
	/* 从第二数开始比较 */
	for i = 1 : 1 : array.length - 1 {
		
		/* 将当前数插入到已经有序的数组中 */
		s temp = array.get(i)
		#dim flag as %Boolean = $$$NO
		s j = i - 1
		while(j > -1){
			
			/* 如果前面的数大于当前数,将他后移 */
			if (array.get(j) > temp){
				d array.set(j + 1, array.get(j))
			}else{
				quit
			}
			s j = j -1
		}
		
		/* 将当前轮数的数放到应该在的位置 */
		d array.set(j + 1 , temp)
	
	}
	q array
}

}


调用

/// w ##class(PHA.YX.Arithmetic).InsertSort()
ClassMethod InsertSort()
{
	#dim array as PHA.YX.Arithmetic.Array = ##class(PHA.YX.Arithmetic.Array).%New()
	d array.init(8)
	d array.insert(0,52)
	d array.insert(1,63)
	d array.insert(2,14)
	d array.insert(3,59)
	d array.insert(4,68)
	d array.insert(5,35)
	d array.insert(6,67)
	d array.insert(7,99)
	
	#dim sort as PHA.YX.Arithmetic.InsertSort = ##class(PHA.YX.Arithmetic.InsertSort).%New() 
	s array = sort.sort(array)
	
	d array.output()
	
	q ""
}
DHC-APP>w ##class(PHA.YX.Arithmetic).InsertSort()
14
35
52
59
63
67
68
99
 

你可能感兴趣的:(Caché,算法与数据结构,Caché,算法,数据结构’,排序,插入排序)