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.快速排序
任意取一个元素,以这个元素为基准,将其他元素分到两边,可以由递归实现
#include<stdio.h> #include<stdlib.h> #include<time.h> #define N 1000050 int a[N];//当数据过大时要放在函数外面防止栈溢出 int m; void QuickSort(int low,int high){ int k; int i; k=a[low]; int left=low; int right=high; if(left>right) return ; while(left!=right){ while(a[right]<k&&left<right) right--; if(left<right){ a[left]=a[right]; left++; } while(a[left]>k&&left<right) left++; if(left<right){ a[right]=a[left]; right--; } } a[left]=k; if(m<=left+1) QuickSort(low,left-1); else{ QuickSort(low,left-1); QuickSort(left+1,high); } } int main(){ int i; int j; int n; while(scanf("%d%d",&n,&m)!=EOF){ for(i=0;i<n;i++) scanf("%d",&a[i]); QuickSort(0,n-1); for(i=0;i<m;i++){ printf("%d",a[i]); if(i!=m-1) printf(" ");//注意最后没有空格 } printf("\n");//每组数据输出一行 } return 0; }
原文:https://www.cnblogs.com/helloworld2019/p/10462971.html