本帖最後由 鄭繼威 於 2023-4-8 12:36 編輯
產生10個範圍介於1~20之不重複隨機亂數, 並利用選擇排序法將它們由小而大排列出來.
跟排序 (一)一樣,只是陣列的值不是一開始給定而是產生出亂數再丟進陣列裡
至於怎麼產生?又要不重複?可以複習一下之前上的產生介於指定範圍內的隨機亂數 (六)-不重複
- #include<iostream>
- #include<cstdlib>
- #include<ctime>
- using namespace std;
- int main()
- {
- srand(time(NULL));
- int tmp;
- int n[10]; //宣告長度為10的陣列
-
- //產生10個範圍介於1~20之不重複隨機亂數放進n陣列裡
- for(int i=0; i<=9; i++)
- {
- //n[i]=亂數
- //1~20->0~19->rand()%20->rand()%20+1
- n[i]=rand()%20+1; //1~20
- //檢查
- for(int j=0; j<=i-1; j++)
- {
- //如果跟前面一樣就退一步
- if(n[i]==n[j])
- {
- i--;
- break;
- }
- }
- }
-
- cout<<"排序前: ";
- for(int i=0; i<10; i++)
- {
- cout<<n[i]<<" ";
- }
- cout<<endl;
-
- //開始排序
- for(int i=0; i<9; i++)
- {
- for(int j=i+1; j<10; j++)
- {
- //倆倆(i,j)比較
- //右邊小於左邊就交換->換到最後最左邊會最小
- if(n[j]<n[i])
- {
- //兩數交換
- tmp=n[j];
- n[j]=n[i];
- n[i]=tmp;
- }
- }
- }
-
- cout<<"排序後: ";
- for(int i=0; i<10; i++)
- {
- cout<<n[i]<<" ";
- }
- cout<<endl;
-
- system("pause");
- return 0;
- }
複製代碼 |