软件工程上老师讲流程图时,要求画冒泡排序和选择排序的流程图--------问题来了,故想基于百度两种排序后,自我总结的写些什么
请将一维数组a[n] 里面的 n个元素 升序排好
---------------------------------------------------------
两种排序的共同点:
外循环:趟数(n-1) for( i=0; i<n-1; i++ )
内循环:比较次数(在n-1基础上, 每趟后, 减1) 冒泡的 for( j=0; j<n-1-i; j++ ) / 选择的 for( j=i+1; j<n; j++ )
---------------------------------------------------------------------
冒泡排序(升序)
特点:将两个相邻元素进行比较, 前 > 后 交换值! ==========》 为了将 “大” 值 往后面放 (气泡越大越往上浮)
1 //冒泡排序: 2 int a[5] = {4,7,5,9,1}; int n = 5; 3 4 int i,j; 5 int temp; 6 7 for(i=0; i<n-1; i++) //外循环:趟数(n-1) 8 { 9 for(j=0; j<n-1-i; j++) //内循环:次数(在n-1的基础上,每趟后 减1) 10 { 11 if(a[j] > a[j+1]) //相邻两个元素比较,前>后 交换! 12 { 13 temp = a[j]; 14 a[j] = a[j+1]; 15 a[j+1] = temp; 16 } 17 } 18 }
流程图:暂略
-----------------------------------------------------------------------------------
选择排序(升序)
特点:定义一个min变量,用来存 “小” 元素 的下标,赋值:①min = i (i=0)。i:外循环, j:内循环;
在待排序的元素中,②内循环:if( a[min] > a[j] ) min = j; //暂理解为数组元素的下标变了,但 元素的值是没有变的;
找到 “小” 值后,③外循环:if( min != i ) { temp=&a[i]; &a[i]=&a[min]; &a[min]=temp;} //将 “小”值 放到数组前面,这个元素(已排好序) 不参与后面的(未排好序) 比较了!
1 //选择排序: 2 int a[5] = {4,7,5,9,1}; int n = 5; 3 int i,j,min; 4 int temp; 5 6 for(i=0; i<n-1; i++) //外循环:趟数(n-1) 7 { 8 min = i; 9 for(j=i+1; j<n; j++) //内循环:次数(在n-1的基础上,每趟后 减1) 10 { 11 if(a[min] > a[j]) 12 min = j; //暂理解为数组元素的下标变了,但 元素的值是没有变的 13 } 14 15 if(min != i) 16 { 17 temp = &a[i]; 18 &a[i] = &a[min]; 19 &a[min] = temp; 20 } 21 }
流程图:暂略(百度易得,实在懒得自己画了)