1.冒泡排序
从后往前,比较两个数的大小,交换位置
//冒泡排序 #include<iostream> using namespace std; void bubble_sort(int a[],int start,int end){ int i,j,tmp; for(i=start;i<=end-2;i++){ for(j=end-1;j>=i+1;j--) if(a[j]<a[j-1]) { tmp=a[j]; a[j]=a[j-1]; a[j-1]=tmp; } } } int main() { int n; cin>>n; int a[n]; for(int i=0;i<n;i++) cin>>a[i]; bubble_sort(a,0,n); for(int i=0;i<n;i++) cout<<a[i]<<" "; }
2.快速排序
快速排序主要是应用了分治策略
a.遍历整个数组,将数组分为两个部分 paritition(int arr[],int start,int end)
b.对分好的部分进行再分
//快排 #include<iostream> using namespace std; //遍历整个数组,二分元素 int partition(int a[],int start,int end){//基准新位置 int i=start; int j=end-1; int tmp=a[i]; while(i<j){//i=j时候退出 while(i<j&&a[j]>=tmp) j--; //找到小于基准的位置 a[i]=a[j];//将j元素放到基准的位置 while(i<j&&a[i]<=tmp) i++;//找到大于基准的位置 a[j]=a[i];//将位置放到小于基准的位置处 } a[j]=tmp;//i j想等的位置放基准 return i; } void qsort(int a[],int start,int end){//对二分的部分继续二分 if(start<end-1){ int tmp=partition(a,start,end); qsort(a,start,tmp); qsort(a,tmp+1,end); } } int main() { int n; cin>>n; int a[n]; for(int i=0;i<n;i++) cin>>a[i]; qsort(a,0,n); for(int i=0;i<n;i++) cout<<a[i]<<" "; }
练习了一下
#include<iostream> using namespace std; int arr[10010]; int partition(int start,int end){ int tmp=arr[start]; int i=start; int j=end; while(i<j){ while(i<j&&arr[j]>=tmp) j--; arr[i]=arr[j]; while(i<j&&arr[i]<=tmp) i++; arr[j]=arr[i]; } arr[i]=tmp; return i; } void qsort(int start,int end){ if(start<end){ int t=partition(start,end); // partition(start,t); // partition(t+1,end); qsort(start,t); qsort(t+1,end); } } int main() { int n; cin>>n; for(int i=0;i<n;i++) cin>>arr[i]; qsort(0,n-1); for(int i=0;i<n;i++) cout<<arr[i]<<" "; }