排序:快速排序,冒泡排序,桶排序,sort函数排序
快速排序
#include<stdio.h> int a[100]; void quicksort(int left,int right) { int t,temp,i,j;//i表示左世兵,j表示右士兵 if(left>right) return ; i=left; j=right; temp=a[left]; while(i!=j) { while(temp<=a[j]&&i<j) j--; while(temp>=a[i]&&i<j) i++; if(i<j) { t=a[i]; a[i]=a[j]; a[j]=t; } } a[left]=a[i]; a[i]=temp; quicksort(left,i-1); quicksort(i+1,right); return ; } int main() { int n,i; while(~scanf("%d",&n)) { for(i=0;i<n;i++) scanf("%d",&a[i]); quicksort(0,n-1); for(i=0;i<n-1;i++) printf("%d ",a[i]); printf("%d\n",a[n-1]); } return 0; }
2.桶排序
作用:先去重再排序
#include<stdio.h> int main() { int a[100]; int i,n,t; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&t); a[t]=1; } for(i=0;i<n;i++) if(a[i]) printf("%d ",i); getchar(); getchar(); }
:通排序的缺点:时空复杂度都不理想,不适用大数据
sort方法排序和a[i]==a[i-1];
适用:先排序再去重
#include<stdio.h> #include<algorithm> using namespace std; int main() { int a[1000],i,n; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); printf("%d ",a[0]); for(i=1;i<n;i++) { if(a[i]!=a[i-1]) { printf("%d ",a[i]); } } return 0; }
冒泡排序
//从小到大排序 #include<iostream> using namespace std; const int Max=100; int arr[Max]; void BubbleSort(int n) { for(int i=0;i<n;i++) { for(int j=0;j<=i;j++) { if(arr[i]<arr[j]) { int t=arr[i]; arr[i]=arr[j]; arr[j]=t; } } } } int main() { int n; cin>>n; for(int i=0;i<n;i++) cin>>arr[i]; BubbleSort(n); for(int i=0;i<n;i++) cout<<arr[i]<<" "; cout<<endl; }