軟件工程上老師講流程圖時,要求畫冒泡排序和選擇排序的流程圖--------問題來了,故想基於百度兩種排序后,自我總結的寫些什么
請將一維數組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 }
流程圖:暫略(百度易得,實在懶得自己畫了)