直接插入排序的比较次数、移动次数和赋值次数 最小/最大/平均值

基于该程序:

比较次数:指的是while循环的移动次数

移动次数:指的是数据在向量(一维数组)中的移动次数,包括R[0]<-R[i],R[j+1]<-R[0]和while循环中的R[j+1]<-R[j]

赋值次数:包括所有的赋值语句

关于比较次数与赋值次数的关系:

对于while循环,程序比较t次后退出循环,移动t-1次,赋值2t-2次,因为前面t-1个while循环执行,第t次while循环不执行。

对于for循环,每次程序额外移动2次,赋值3次。

所以每个for循环比较t次,移动t+1[(t-1)+2]次,赋值2t+1次[(2t-2)+3]。

I.平均比较次数与赋值次数

对于把第i(i=2,3,…,n)个数放入相应的位置,

程序在第j个位置退出while循环,a[i]放入a[j+1]处,

j 等于 i-1 ~ 0的概率都相同(一个数在一个序列中的位置的所有可能性的概率都相等)

所以

II.最小比较次数与赋值次数

最小值为while循环第一次直接退出的情况,比较次数为1次。

III.最大比较次数与赋值次数

最大值为当j=0时退出while循环的情况,比较次数为i次。

总结:

比价次数:

移动次数:

赋值次数:

然后我也不知道我对概念的理解和计算的理解对不对。。。

反正我认为某蒙的ppt不对,我可以不客气地讲,这有点坑爹啊。。。

时间: 2024-10-27 07:18:15

直接插入排序的比较次数、移动次数和赋值次数 最小/最大/平均值的相关文章

【1】求字符串出现次数最多的字符及次数

1 package com.exe.test1; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 /** 7 * 输入一串字符串,求出重复次数最多的字母 8 * @author WGS 9 */ 10 public class Exe1 { 11 12 public static String getRepeatCharacter(String str){ 13 StringBuilder sb=new StringBuilde

统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数。

/** * A:案例演示 * 需求:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数,其他字符出现的次数. * [email protected]#$%^ * 分析:字符串是有字符组成的,而字符的值都是有范围的,通过范围来判断是否包含该字符 * 如果包含就让计数器变量自增 */ public static void main(String[] args) { String s = "[email protected]#$%^"; int big = 0; int smal

统计字符串中出现次数最多的字母的次数,如果有多个重复的,都求出

package javastudy; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.TreeSet; public class Test1 { public static void main(String [] args){ String str = "aacdggdhrdhgsjrsovoiwimtcpiq"; new Test

js 计算字符串中出现次数最多的字符及其次数

方法一: var str="sdfseresssssdssdfsa"; var arr=[]; var max=0; var maxk; for(var i=0;i<str.length;i++){ var k=str[i]; if(!arr[k]){ arr[k]=str.split(k).length-1; } } for(var n in arr){ if(max < arr[n]){ max=arr[n]; maxk=n; } } console.log("

统计来访ip的次数,及输出来访次数大于10000的IP

分析IP[$1]++ ##统计IP下标出现的次数 for (i in IP){print IP[i],i} 循环输出IP下标出现的次数和下标(ip地址) 172.25.0.11172.25.0.12172.25.0.11172.25.0.10 分析后的结果 : awk '{IP[$1]++} END{for(i in IP){print IP[i],i}}' /var/log/httpd/access_log | awk '$1>=10000{print $2}' 原文地址:http://blo

用JAVA实现找出输入字符串中的出现次数最多的字符及其次数;

通过Map 类实现,通过键值对的方式,可以将输入的字符串的每一个字符,作为键,每个字符出现的次数作为值:如下: public class Find { public static void main(String[] args){ String scan=new Scanner(System.in).nextLine();//获取键盘上输入的字符串: Map<Character,Integer> map = new HashMap<Character,Integer>();//新建

hdu 1806 Frequent values(给定一个非降序数组,求任意区间内出现次数最多的数的次数)

1.题目解析可见<训练指南>P198 2代码: #include<cstdio> #include<cstring> #include<cmath> #define Min(a,b) ((a)<(b)?(a):(b)) #define Max(a,b) ((a)>(b)?(a):(b)) #define N 100005 #define INF 1<<30 using namespace std; int a[N]; int valu

关于插入排序元素之间比较次数的计算

问题:3,1,4,1,5,9,6,5  通过归并排序对它进行从小到大的排序  要进行多少次数组元素之间的比较? [3] 1 4 1 5 9 6 5 第一次排序结果:[1 3] 4 1 5 9 6 5; //新加入的3和1比较,比较次数1次 第二次排序结果:[1 3 4] 1 5 9 6 5; //新加入的4和3比较,比较次数1次 第三次排序结果:[1 1 3 4]  5 9 6 5; //新加入的1分别和4 3 1 比较,比较次数3次 第四次排序结果:[1 1 3 4 5] 9 6 5; //新

七种机器内部排序的原理与C语言实现,并计算它们的比较次数与移动次数。

内部排序是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 排序是计算机程序设计中的一种重要操作,其功能是对一个数据元素集合或序列重新排列成一个按数据元素某个相知有序的序列.排序分为两类:内排序和外排序. 其中快速排序的是目前排序方法中被认为是最好的方法. 内部排序方法: 1.插入排序(直接插入排序): 2.快速排序: 3.选择排序(简单选择排序): 4.归并排序: 5.冒泡排序: 6.希尔排序(希尔排序是对直接插入排序方法的改进): 7.堆排序: ——摘自百度百科 #ifnd