氣泡排序
#include<iostream> using namespace std; int main(){ int m[]={6,8,44,7,9,34,64,1}; for(int j=0;j<8;j++){ for(int i=j+1;i<8;i++){ if(m[j]>m[i]){ swap(m[j],m[i]); } } } for(int i=0;i<8;i++){ cout<<m[i]<<' '; } return 0; }
/選擇排序
基本思想:從陣列的末排序區域選出一個最小的元素
把它與陣列中的第一個元素交換位置
然後再從剩下的末排序區域選出一個最小的元素
把它與陣列中的第二個元素交換位置
重複上述過程,直到陣列中的所有元素按升序排列完成
#include<iostream> using namespace std; int main(){ int min=0; int m[]={6,8,44,7,9,34,64,1}; for(int j=0;j<8;j++){ min=j; for(int i=j+1;i<8;i++){ if(m[i]<m[min]){ min=i; } } swap(m[j],m[min]); } for(int i=0;i<8;i++){ cout<<m[i]<<' '; } return 0; }
/插入排序
基本思想:把一個要排序的陣列劃分為己排序和為排序的兩部分
再從未排序部分逐個去除元素
把它和己排序元素進行比較
從右到左比較相鄰的兩個元素
如果右邊的元素比左邊的元素小
則交換兩個元素,並向左繼續比較和交換
否則就停止比較
按此處理為排序部分的所有元素
最終得到一個按升序排列的有序陣列
這種演算法也叫直接插入排序
#include<iostream> using namespace std; int main(){ int min=0; int m[]={6,8,44,7,9,34,64,1}; for(int j=1;j<8;j++){ for(int i=j;i>0;i--){ if(m[i]<m[i-1]){ swap(m[i],m[i-1]); }else{ break; } } } for(int i=0;i<8;i++){ cout<<m[i]<<' '; } return 0; }
/希爾排序
對一維陣列中的十個陣列進行從小到大排序
基本思想:是直接插入排序的進階版本,
將整個待排序元素序列分割成若干個子序列,
(由相隔某個“增量”的元素組成)分別進行直接插入排序,然後縮減增量再進行排序,
待整個序列中的元素基本有序(增量足夠小)時,在對全體元素進行一次直接插入排序
#include<iostream> #include<math.h> using namespace std; int main(){ string m="wangjiaxing"; for(double i=11;i>1;){ i=round(i/2); for(int j=0;j+int(i)<11;j++){ if(m[j]>m[j+int(i)]){ swap(m[j],m[j+int(i)]); } } } cout<<m; return 0; }
/快速排序
#include<iostream> using namespace std; int n[]={6,3,5,8,9,10,7,34,89,2}; void ks(int n[10],int i,int j){ if(i<j){ int p=i; int l=i,r=j; int m=n[p]; while(l!=r){ while(n[r]>=m&&l!=r){ r--; } while(n[l]<=m&&l!=r){ l++; } if(l<r){ swap(n[l],n[r]); } } swap(n[i],n[l]); ks(n,i,l-1); ks(n,l+1,j); } } int main(){ ks(n,0,9); for(int i=0;i<10;i++){ cout<<n[i]<<" "; } return 0; }
end