題目:給定無序數組
a[ ] = {77,2,80,48,25,56,90,84,71,10,},
如何排列成有序數組?
思考方向一:在數組裏找出最大的數組,輸出它的位置
- 設第0位爲maxid
- 如果 a[1]>a[maxid], 讓 maxid = 1
- 在循環裏,等循環走完後, maxid的數字就是數組裏最大的一個
for( int i=1; i<len; i++){
if( a[i] > a[maxid])
{
maxid = i;
}
}
代碼如下:
#include <stdio.h>
//在數組中搜索最大數字,返回最大數字的位置
int max( int a[], int len){
int maxid = 0;
for( int i=1; i<len; i++ ){
if( a[i]>a[maxid]){
maxid = i;
}
}
return maxid;
}
int main()
{
int a[] = {77,2,80,48,25,56,90,84,71,10,};//定義數組
int maxid = max(a, sizeof(a)/sizeof(a[0]));
printf("%d\n", maxid);
return 0;
}
輸出結果:6
//即最大的數字90 在數組的位置是6
思考方向二:找到最大的數字90後,我們希望把90放在最後一位
代碼如下:
include <stdio.h>
//在數組中搜索最大數字,返回最大數字的位置
int max( int a[], int len){
int maxid = 0;
for( int i=1; i<len; i++ ){
if( a[i]>a[maxid]){
maxid = i;
}
}
return maxid;
}
int main()
{
int a[] = {77,2,80,48,25,56,90,84,71,10,};//定義數組
int len = sizeof(a)/sizeof(a[0]);//賦值數組的長度給len
//選擇排序
//swap a[maxid], a[len-1]
//在len-1位置上做交換
//交換完後在len-2位置做交換
//設置控制變量i
for( int i = len-1; i>0; i--)//i>0意味着最後一個i的位置上1
{
int maxid = max(a, i+1);
//i+1=len-1+1=len,調用函數search在a裏面找最大數字的位置賦值給maxid
int t = a[maxid];
a[maxid] = a[i];//i=len-1,把最大的數字和len-1位置的數字交換
a[i] = t;
}
for( int i=0; i<len; i++)
{
printf("%d ",a[i]);//把排好序的數字逐個輸出
}
return 0;
}
輸出結果:
2 10 25 48 56 71 77 80 84 90
以上是我在中國大學MOOC的翁愷老師《程序設計入門》課程的學習筆記。請多多指教,謝謝老師,謝謝大家?