(2)選擇排序: 基本思想:從陣列的未排序區域選出一個最小的元素,把它與陣列中的第一個元素交換位置;然後再從剩下的未排序區域中選出一個最小的元素,把它與陣列中的第二個元素交換位置。重複上述過程,直到陣列中的所有元素按升序排列完成。 【案例】 對一維陣列中的十個資料進行從小到大排序: #include<iostream> using namespace std; int main(){ int a[]={1,3,5,8,9,10,7,34,89,46}; int m=0; for(int i=0;i<10;i++){ int wz=i; for(int j=i+1;j<10;j++){ if(a[j]<a[wz]){ wz=j; } } m=a[i]; a[i]=a[wz]; a[wz]=m; } for(int i=0;i<10;i++){ cout<<a[i]<<" "; } return 0; } (3)插入排序: 基本思想:把一個要排序的陣列劃分為已排序和未排序的兩部分,再從未排序部分逐個去除元素,把它和已排序元素進行比較,從右到左比較相鄰的兩個元素,如果右邊的元素比左邊的元素小,則交換兩個元素,並向左繼續比較和交換,否則就停止比較。按此處理未排序部分的所有元素,最終得到一個按升序排列的有序陣列。這種演算法也叫直接插入排序。 【案例】 對一維陣列中的十個資料進行從小到大排序: #include<iostream> using namespace std; int main(){ int a[]={1,3,5,8,9,10,7,34,89,46}; int m=0; for(int i=1;i<10;i++){ for(int j=i;j>0;j--){ if(a[j]<a[j-1]){ m=a[j]; a[j]=a[j-1]; a[j-1]=m; }else{ j=0; } } } for(int i=0;i<10;i++){ cout<<a[i]<<" "; } return 0; } 桶排序思想: 把每個陣列開闢的空間看作一個桶, 將與桶編號相同的資料存入桶中 1 3 5 7 9 8 6 4 2 10 資料b[] 開闢桶的個數大於資料最大值 第一步:桶內初始化為0 第二步:判斷資料存入桶中 a[11] a[0]...a[10] if(i==b[j]) a[i]++; 第三步輸出: if(a[i]!=0){ i a[i]--; } #include<iostream> #include<bits/stdc++.h> using namespace std; int main(){ int a[10]={1,3,9,9,9,10,2,4,6,8}; int b[1000]; memset(b,0,sizeof(b));//陣列全部初始化為0 // for(int i=0;i<1000;i++){ // b[i]=0; // } for(int i=0;i<10;i++){ b[a[i]]++; } for(int i=0;i<1000;i++){ while(b[i]!=0){ cout<<i<<" "; b[i]--; } } return 0; }