一些基础的排序算法实现
//排序算法
#include<iostream>
using namespace std;
int a[100];
int b[100];
int n;
//打印函数 显示每次排序后的结果
void display(int a[],int n){
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
//直接插入排序
void InsertSort(int a[],int n){
int i,j;
for(i=2;i<=n;i++){
if(a[i]<a[i-1]){
a[0]=a[i];
for(j=i-1;a[0]<a[j];j--)
a[j+1]=a[j];
a[j+1]=a[0];
}
}
}
//折半插入排序
void InsertSort2(int a[],int n){
int i,j,low,high,mid;
for(i=2;i<=n;i++){
a[0]=a[i];
low=1,high=i-1;
while(low<=high){
mid=(low+high)>>1;
if(a[mid]>a[0]) high=mid-1;
else
low=mid+1;
}
for(j=i-1;j>=high+1;--j){
a[j+1]=a[j];
}
a[high+1]=a[0];
}
}
//希尔排序
void SheelSort(int a[],int n){
int dk,i,j;
for(dk=n/2;dk>=1;dk=dk/2)
for(i=dk+1;i<=n;++i)
if(a[i]<a[i-dk]){
a[0]=a[i];
for(j=i-dk;j>0&&a[0]<a[j];j-=dk)
a[j+dk]=a[j];
a[j+dk]=a[0];
}
}
//冒泡排序 排序趟数比较少
void BubbleSort(int a[],int n){
bool flag;
for(int i=1;i<=n;i++){
flag=false;
for(int j=n;j>i;j--)
if(a[j-1]>a[j]){
swap(a[j-1],a[j]);
flag=true;
}
display(a,n);
if(flag==false)
return ;
}
}
//冒泡排序 没有优化
void BubbleSort2(int a[],int n){
for(int i=1;i<=n-1;i++)
for(int j=i+1;j<=n;j++){
if(a[j]<a[i])
swap(a[j],a[i]);
}
}
//快速排序
void quickSort(int a[],int n,int low,int high){
if(low>=high) return ;
int i=low-1,j=high+1,x=a[(low+high)>>1];
while(i<j){
do j--;while(a[j]>x);
do i++;while(a[i]<x);
if(i<j)
swap(a[i],a[j]);
}
quickSort(a,n,low,j);
quickSort(a,n,j+1,high);
}
//选择排序
void SelectSort(int a[],int n){
for(int i=1;i<n-1;i++){
int min=i;
for(int j=i+1;j<=n;j++)
if(a[j]<a[min]) min=j;
if(min!=i) swap(a[i],a[min]);
}
}
//堆排序
// 建立大根堆
void HeadAdjust(int a[],int k,int n){
a[0]=a[k];
for(int i=k*2;i<=n;i*=2){
if(i<n&&a[i]<a[i+1])
i++;
if(a[0]>a[i]) break;
else
a[k]=a[i],k=i;
}
a[k]=a[0];
}
void BuildMaxheap(int a[],int n){
for(int i=n/2;i>=1;i--)
HeadAdjust(a,i,n);
}
//堆排序
void HeapSort(int a[],int n){
BuildMaxheap(a,n);
for(int i=n;i>1;i--)
{
swap(a[i],a[1]);
HeadAdjust(a,1,i-1);
}
}
//归并排序
void MergeSort(int a[],int l,int r){
if(l>=r) return ;
int mid=(l+r)>>1;
MergeSort(a,l,mid);
MergeSort(a,mid+1,r);
int k=0,i=l,j=mid+1;
while(i<=mid&&j<=r){
if(a[i]<=a[j])
b[k++]=a[i++];
else
b[k++]=a[j++];
}
while(i<=mid) b[k++]=a[i++];
while(j<=r) b[k++]=a[j++];
for(int i=l,j=0;i<=r;i++,j++) a[i]=b[j];
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
//InsertSort(a,n);
//InsertSort2(a,n);
//SheelSort(a,n);
//BubbleSort(a,n);
//quickSort(a,n,1,n);
//SelectSort(a,n);
//HeapSort(a,n);
MergeSort(a,1,n);
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;
}