选择排序的改进方法 分析选择排序过程发现,在每一轮的比较中交换次数 太多,我们可以尽量减少交换次数,实际上每轮比较 只要一次进行交换就能完成排序 对选择排序进行改进,其方法如下: 先从要排序的n个数中找出最小的数,把它放在第一个位置 再从剩下的n-1个数中找出最小的数,把它放在第二个位置 这样重复做下去 改进后的选择排序方法数据进行比较的次数并没有 减少,但每一轮只进行一次交换,加快了程序运行 速度
➢分析选择排序过程发现,在每一轮的比较中交换次数 太多,我们可以尽量减少交换次数,实际上每轮比较 只要一次进行交换就能完成排序. ➢对选择排序进行改进,其方法如下: ▪ 先从要排序的n个数中找出最小的数,把它放在第一个位置 ▪ 再从剩下的n-1个数中找出最小的数,把它放在第二个位置 ▪ 这样重复做下去 ➢改进后的选择排序方法数据进行比较的次数并没有 减少,但每一轮只进行一次交换,加快了程序运行 速度 ➢选择排序的改进方法
选择排序的改进方法 设置变量k用以存储当前最小数的下标 include< stdio. h> void main( a|0111 i int a 6,i,j,k, t; a[117 2 for(i=0;i<6;i++) a[2]2 scan 7 f(“%d”,&a[il); for(i=0;i<5;i++) a|35 5 {k=i; 7 for(j=i+1;j<6;j++) if( ak>ajl)kj; a5 if(kl=i) 5 k 2 k i tall; ai=ak; a[k=t;/end if 5!=0 2!=1 4!=2 }∥ end for a08和换a1812换2121和叫4换for(i=0;i<6;i++) printf(“%3d”,al[i):
#include <stdio.h> void main( ) { int a[6] , i , j , k , t; for ( i=0 ; i<6 ; i++) scanf(“%d”, &a[i] ); for ( i=0 ; i<5 ; i++) { k=i ; for ( j=i+1 ; j<6 ; j++) if ( a[k]>a[j] ) k=j ; if ( k!=i ) { t=a[i] ; a[i]=a[k] ; a[k]=t ; } //end if } // end for for ( i=0 ; i<6 ; i++) printf( “%3d”, a[i] ); } 9 7 2 5 4 1 a[0] a[1] a[2] a[3] a[4] a[5] k 012 1 9 1 7 2 5 4 9 5!=0 a[0]和a[5]换 5 k 12 2 7 2!=1 a[1]和a[2]换 1 2 7 5 4 9 4!=2 a[2]和a[4]换 k 234 4 7 设置变量k用以存储当前最小数的下标 ➢选择排序的改进方法
412二维数组的引出及使用 二维数组的定义 1、概念:一个一维数组,它的每一个元素都是类型相同 的一维数组,就形成一个二维数组 2、定义形式: 类型标识符数组名[常量表达式11[常量表达式2 如:inta34]; a010 a01 a[02 a[03 a 2
一、 二维数组的定义 1、概念: 一个一维数组, 它的每一个元素都是类型相同 的一维数组, 就形成一个二维数组 2、定义形式 : 类型标识符 数组名 [ 常量表达式1 ] [ 常量表达式2 ] 如: int a[3][4] ; a[0] a[1] a[2] a[0][0] a[0][1] a[0][2] a[0][3] 4.1.2 二维数组的引出及使用
412二维数组的引出及使用 3、存储形式:数组的元素在内存中是连续存放的 inta33];数组a的存放形式如下: a00J→a01→a02 1010 apOlo a[101a{11l÷a[112 1012 1014 al0[2] a2|01a2|11a[22 1016 a[10 二维数组的引用 1018 allal 1020 数组元素的表示形式: al1[2 1022 数组名[下标1[下标2 a2|0 1024 [2]1l 注意:(1)每个下标都要用括起来1026 a2|12 如a2][不能写成a[2,1 (2)下标不要超过定义的范围
3、存储形式 : 数组的元素在内存中是连续存放的 int a[3][3] ; 数组a的存放形式如下 : a[1][0]→a[1][1]→a[1][2] a[2][0]→a[2][1]→a[2][2] a[0][0]→a[0][1]→a[0][2] a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] a[2][0] a[2][1] a[2][2] 1010 1012 1014 1016 1018 1020 1022 1024 1026 二、 二维数组的引用 数组元素的表示形式 : 数组名 [下标1] [下标2] 注意 : (1) 每个下标都要用 [ ] 括起来 如 a [2] [1] 不能写成 a [2,1] (2) 下标不要超过定义的范围 4.1.2 二维数组的引出及使用
412二维数组的引出及使用 、二维数组的初始化 1、分行初始化 inta34={1,2,3,4},{5,6,7,8},{9,10,11,12}; 第对{内的数据赋给第1行数组元素,[1234 以此类推,此方法较直观 5678 2、按数据的排列顺序对数组元素赋初值910112 inta34}={1,2,3,4,5,6,7,8,9,10,11,12}; 将数据依次赋给元素a00,a0J1]…a[2|3l 注意:此方法数据没有明显的界限,当数据较多时容易出错
1 2 3 4 5 6 7 8 9 10 11 12 三、 二维数组的初始化 1、分行初始化 int a[3][4]={{ 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 }}; 第1对{ }内的数据赋给第1行数组元素, 以此类推,此方法较直观 2、按数据的排列顺序对数组元素赋初值 int a[3][4]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; 将数据依次赋给元素 a[0][0] , a[0][1] …a[2][3] 注意: 此方法数据没有明显的界限, 当数据较多时容易出错 4.1.2 二维数组的引出及使用