直接插入排序
插入排序(Insertion Sort)的基本思想是:次将一个待排序的,按其字大小插入到前面已排好序的每记记记记记记记记记记记记记记记记记记记记记子文件中的适当位置,直到全部插入完成止。记记记记记记记记记
本介两插入排序方法:直接插入排序和希排序。记记记记记记记记记记记记记记记记记记记记记记记记
直接插入排序基本思想
1、基本思想
假待排序的存放在数记记记记记记记记记记记记R[1..n]中。初始,记记R[1]自成1个有序区,无序区记R[2..n]。从i=2起直至i=n记止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个的有序区。记记记记记记记
2、第i-1趟直接插入排序:
通常将一个记记R[i](i=2,3,,…n-1)插入到当前的有序区,使得插入后仍保区里的是按字有序的操作称第记记记记记记记记记记记记记记记记记记记记i-1趟直接插入排序。
排序程的某一中刻,记记记记记记记记记记R被划分成两个子区记R[1,,i-1],已排好序的有序区,和R[i,,n],当前未排序的部分,可称无序区,。
直接插入排序的基本操作是将当前无序区的第1个记记R[i]插人到有序区R[1,,i-1]中适当的位置上,使R[1,,i]记记新的有序区。因方法记记记记记记记记记记次使有序区增加每1个,通常称增量法。记记记记记记记记记记
插入排序与打扑克整理手上的牌非常似。摸来的第记记记记记记记记记记记记记记记记1记记记记记记记记牌无整理,此后次从桌上的牌每(无序区)中摸最上面的1记并插入左手的牌(有序区)中正确的位置上。了找到个正确的位置,自左向右记记记记记记记记记记记记记记记记记(或自右向左)将摸来的牌与左手中已有的牌逐一比。记记一趟直接插入排序方法
1,方法简简简简
首先在当前有序区R[1..i-1]中找记记R[i]的正确插入位置k(1?k?i-1),然后将R[k,,i-1]中的均后移一个位置,出记记记记记记记记记记记记k位置上的空记插入R[i]。
注意:
若R[i]的字大于等于记记记记记记记R[1,,i-1]中所有的字,记记记记记记记记R[i]就是插入原位置。
2,改的方法简简简简
一找比操作和移操作交替地行的方法。记记记记记记记记记记记记记记记记记记记记记记记
具体做法:
将待插入记记R[i]的字从右向左依次与有序区中记记记记记记记记记记记记记记记记R[j](j=i-1,i-2,,…1)的字行比:记记记记记记记记
?若 R[j]的字大于记记记记记R[i]的字,将记记记记记记R[j]后移一个位置,
?若R[j]的字小于或等于记记记记记记记记R[i]的字,找程束,记记记记记记记记记记记记j+1即记R[i]的插入位置。
字比记记记记R[i]的字大的均已后移,所以记记记记记记记记记记记记记记j+1的位置已空,只要将记记记记记记记R[i]直接插入此位置即可完成一趟直接插入排序。直接插入排序算法
1,算法描述
void lnsertSort(SeqList R)
{ //记记序
R中的记记R[1..n]按增序行插入排序记记记记记记记记记
int i,j,
for(i=2;i<=n,i++) //依次插入R[2],,…R[n]
if(R[i].key
=1")。
注意:
记记记记记记记记记记记记记记记记记?上,一切化界条件而引入的附加点(元素)均可称哨兵。记记记记
记记记记记记记记记记记记记记记记【例】表中的点上是一个哨兵
?引入哨兵后使得找循条件的大减少了一半,所以于数大的文件的 记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记就相当可。于似于排序使用率非常高的算法,要尽可能地减少其运行。所记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记记以不能把上述算法中的哨兵雕虫小技,而深刻理解并掌握技巧。记记记记记记记记记记记记记记记记记记记记记记简简简简简简简简简简定入例的排序程
待排序的文件有记记记记记记记记8个,其字分:记记记记记记记记记记记49,38,65,97,76,13,27,49。了区两个相同的字记记记记记记记记记记记记49,后一个49的
下方加了一下划以示区。其排序程【记记记记记记记记记记记记记记记记记画模演示】
算法分析
1,算法的性能分析简简简简简简
于具有记记记记n个的文件,要行记记记记记记记记记n-1趟排序。
各状下的度:记记记记记记记记记记记
???????????????????????????????
? 初始文件状 ? 记正序 ? 反序 ?无序(平均) ?
???????????????????????????????
? 第i趟的记记 ? 1 ? i+1 ? ,i-2,/2 ?
? 字比次数记记记 ? ? ? ?
???????????????????????????????2?记记记记记记字比次数 ? n-1 ?(n+2)(n-1)/2? ?n/4 ?
???????????????????????????????
?第i趟移次数记记记记记记 ? 0 ? i+2 ? ,i-2,/2 ?
???????????????????????????????2?记记记记记记记的移次数 ? 0 ?(n-1)(n+4)/2? ?n/4 ?
???????????????????????????????22?记记记记度 ? 0,n, ? O,n, ? O,n, ?
???????????????????????????????
注意:
初始文件按字增有序,称记记记记记记记记记记"正序"。
记记记记记记记记记记初始文件按字减有序,称"反序"。
2,算法的空度分析简简简简简简
算法所需的助空是一个哨,助空度记记记记记记记记记记记记记记记记记记S(n)=O(1)。是一个就地排序。3,直接插入排序的定性简简简
直接插入排序是定的排序方法。记记记记记记记记