網站聲明

本網站包含了各式各樣的資源,如果有侵占到您的著作權,請與本人通知,本人會立即改進。本站所有發表僅屬研究討論性質,如果有任何後果請自行負責。

2014-05-29

TQC+ C 綜合應用一 809 選擇排序

809.
設計說明:

1. 輸入15個整數於一維陣列 arr ,利用選擇排序(Selection Sort)將其由小至大排序之,並將排序後的資料以二維陣列 arr2 表示知。輸出排序後的 arr2資料。
2. 執行結果如範例圖。


參考程式碼:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. void ss(int*,int);
  4. int main(){
  5.  int arr[15], arr2[5][3], n=15, i, j, number=0;
  6.  printf("請輸入...\n");
  7.  for(i=0;i<n;i++){
  8.   printf("arr[%d]: ",i);
  9.   scanf("%d",&arr[i]);
  10.  }
  11.  ss(arr,n);
  12.  for(i=0;i<5;i++)
  13.   for(j=0;j<3;j++)
  14.    arr2[i][j] = arr[i*3+j];
  15.  printf("印出陣列...");
  16.  for(i=0;i<5;i++)
  17.   for(j=0;j<3;j++)
  18.    printf("\narr2[%d][%d]=%d",i,j,arr2[i][j]);
  19.  system("PAUSE");
  20.  return 0;
  21. }
  22. void ss(int *data,int n){
  23.  int i ,j,min,ch;
  24.  for(i=0;i<n;i++){
  25.   min =i;
  26.   for(j=i;j<n;j++){
  27.    if(data[j]<data[min]){
  28.     min =;
  29.    }
  30.   }
  31.   if(min!=i){
  32.    ch =data[i];
  33.    data[i]=data[min];
  34.    data[min]=ch;
  35.   }
  36.  }
  37. }

選擇排序的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。...(詳細)。

TQC+ C 試題總整理

聲明:

這裡的範例程式碼皆由本人親自編輯,歡迎轉載本教學,但請註明本網站,尊重一下作者的心血

2 則留言:

  1. "選擇排序的主要優點與數據移動有關 ... 選擇排序每次交換一對元素,它們當中至少有一個將被移到其最終位置上,因此對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;
    }
    }
    }

    回覆刪除
    回覆
    1. 好棒≧∇≦這麼一移,答案就正確了誒。原本的有亂幾個號碼

      刪除

歡迎留言,較舊文章需要留言審核看不到自己的留言是正常的。
若長時間無回應請使用以下聯絡方式:
填寫表單:https://forms.gle/hxxX9n4tATcFnhnk8
寄信到:happyplayblogs@gmail.com