- 27
- 0
- 约2.29千字
- 约 11页
- 2018-11-30 发布于天津
- 举报
冒泡排序算法分析.ppt
选择排序 冒泡排序 * 上一页 下一页 返回上一级 * 例1:输入5个数,应用简单选择法排序,并将其按从大到小的顺序输出 选择法:从第i个记录开始,通过n-i次比较,从n-i+1个记录中选出数值最大的,并将其与第i个记录交换(1≤i≤n)。 实现:用变量k记录存储了最大数据的数组元素的下标。开始令k=i,然后将第i个数组元素依次与其后的n-i个元素比较,如果发现第j个数组元素的值大于第i个数组元素的值,则令k=j,直到比较完成,并将第k个和第i个数组元素的值互换,这样就完成了一趟排序;然后令i=i+1,重复上述过程,直到i==n 例如: a[1] a[2] a[3] a[4] a[5] 3 2 6 8 5 第一趟: i=1 为符合习惯,数组下标从1开始。 k=1 32, k=1 36, k=3 68, k=4 85, k=4 k=3 k=4 8 2 6 3 5 第二趟: i=2 8 6 2 3 5 第四趟: i=4 8 6 5 3 2 第三趟: i=3 8 6 5 3 2 8 6 5 3 2 main( ) { int a[6]; int i, j, k,t; printf(“input five numbers:”); for(i=1; i=5; i++) scanf(%d, a[i]); /*输入数据*/ for(i=1; i=4; i++) /*排序(选择法)*/ { for( k=i, j=i+1; j=5; j++) if(a[k]a[j]) k=j; if ( k!=i ) { t=a[i]; a[i]=a[k]; a[k]=t; } } printf(“the sorted numbers:”); for(i=1; i=5; i++) printf(%d, a[i]); /*输出数据*/ printf(\n); } 例2:输入6个数,应用冒泡排序法对其排序,最后按照从大到小的顺序输出。 算法基本思想:在每一趟排序中,对所有未排序的数据按照相邻关系,两两进行比较,每次比较后,将较小的数据向后移动,这样一趟排序完成后,可以保证将最小的数据放到了最后;然后再开始下一趟比较,直到所有数据都排好序。 排序过程如下(为符合习惯,数组下标从1开始) 为了表述方便,定义以下3个变量: n —— 待排序的数的个数,这里 n=6 j —— 扫描的趟数 i —— 第j趟扫描中待比较元素的下标范围,或者可以说是每一趟扫描中比较的次数。 冒泡排序算法分析: 从表中可以看出最小的一个数第一遍扫描就交换到a[6]中。如果将a[1]视为水底,a[6]视为水面: 最轻的(最小的)一个数 1 最先浮到水面,交换到a[6]; 次轻的 2 第二遍扫描交换到a[5]; 再轻的 3 第三遍扫描交换到a[4]; … 依此类推,有6个数,前5个数到位需5遍扫描,第6个最重的数自然落在a[1]中。因此,6个数只需5遍扫描,即j=n-1, n=6。 冒泡排序算法分析: 再看在每遍扫描中,相邻两数组元素的比较次数。 当j=1时,i=1,2,…,n-j。n=6时,比较5次之后a[6]中有一个最小数到达,这时a[6]不必再参与比较了。 因此在第二遍搜索时,j=2, i=1,2,…,n-j,即i=1,2,3,4。比较4次之后次小的一个数到达了a[5]。这时a[5]不必再参与比较了。 因此,j=3时,i=1,2,3;j=4时,i=1,2;j=5时,i=1。 即:i=n-j,n=6 冒泡排
原创力文档

文档评论(0)