809.
設計說明:
1. 輸入15個整數於一維陣列 arr ,利用選擇排序(Selection Sort)將其由小至大排序之,並將排序後的資料以二維陣列 arr2 表示知。輸出排序後的 arr2資料。
2. 執行結果如範例圖。
參考程式碼:
選擇排序的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。...(詳細)。
TQC+ C 試題總整理
- #include <stdio.h>
- #include <stdlib.h>
- void ss(int*,int);
- int main(){
- int arr[15], arr2[5][3], n=15, i, j, number=0;
- printf("請輸入...\n");
- for(i=0;i<n;i++){
- printf("arr[%d]: ",i);
- scanf("%d",&arr[i]);
- }
- ss(arr,n);
- for(i=0;i<5;i++)
- for(j=0;j<3;j++)
- arr2[i][j] = arr[i*3+j];
- printf("印出陣列...");
- for(i=0;i<5;i++)
- for(j=0;j<3;j++)
- printf("\narr2[%d][%d]=%d",i,j,arr2[i][j]);
- system("PAUSE");
- return 0;
- }
- void ss(int *data,int n){
- int i ,j,min,ch;
- for(i=0;i<n;i++){
- min =i;
- for(j=i;j<n;j++){
- if(data[j]<data[min]){
- min =j ;
- }
- }
- if(min!=i){
- ch =data[i];
- data[i]=data[min];
- data[min]=ch;
- }
- }
- }
選擇排序的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。...(詳細)。
TQC+ C 試題總整理
聲明:
這裡的範例程式碼皆由本人親自編輯,歡迎轉載本教學,但請註明本網站,尊重一下作者的心血
"選擇排序的主要優點與數據移動有關 ... 選擇排序每次交換一對元素,它們當中至少有一個將被移到其最終位置上,因此對n個元素的表進行排序總共進行至多n-1次交換。在所有的完全依靠交換去移動元素的排序方法中,選擇排序屬於非常好的一種。"
回覆刪除因此,把陣列元素交換的那段的程式 (29~33行) 搬到迴圈的外層應該可以大幅減少交換的次數:
void ss(int *data,int n)
{
int i, j, min, ch;
for (i = 0; i < n; i++) {
min = i;
for (j = i; j < n; j++) {
if (data[j] < data[min]) {
min = j;
}
}
if (min != i) {
ch = data[i];
data[i] = data[min];
data[min] = ch;
}
}
}
好棒≧∇≦這麼一移,答案就正確了誒。原本的有亂幾個號碼
刪除