#include<iostream>
using namespace std;
void fn(int arr[],int n)//冒泡排序
{
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-i-1;j++)
{
if(arr[j]>arr[j+1])
{
int m=arr[j];
arr[j]=arr[j+1];
arr[j+1]=m;
}
}
}
}
void insertfn(int arr[],int n)//直接插入排序
{
for(int i=1;i<n;i++)
{
int j=i;
while(j>0 && arr[j]<arr[j-1])
{
int m=arr[j];
arr[j]=arr[j-1];
arr[j-1]=m;
j--;
}
}
}
void choosefn(int arr[],int n)//直接选择排序
{
for(int i=0;i<n;i++)
{
int min=i;
for(int j=i+1;j<n;j++)
{
if(arr[j]<arr[min])
{
min=j;
}
}
int m=arr[i];
arr[i]=arr[min];
arr[min]=m;
}
}
int fastfn(int arr[],int left,int right)//快速排序
{
int flag=arr[left];
while(left<right)
{
while(arr[right]>=flag&&left<right) right--; //大于flag!!
if(right>left){
arr[left]=arr[right];
left++;
}
while(arr[left]<flag && left<right) left++;
if(right>left){
arr[right]=arr[left];
right--;
}
}
arr[left]=flag;
return left;
}
void quick(int arr[],int left,int right){
if(left<right){
int i=fastfn(arr,left,right);
quick(arr,left,i-1);
quick(arr,i+1,right);
}
}
//下面是归并排序
void organize(int a[],int first,int mid,int last,int temp[]){//合并两个数组到新数组
int i=first,j=mid+1;
int m=mid,n=last;
int k=0;
while(i<=m && j<=n){ //两数组按顺序放置
if(a[i]<=a[j])
temp[k++]=a[i++];
else
temp[k++]=a[j++];
}
while(i<=m){ //防止有漏下的数组
temp[k++]=a[i++];
}
while(j<=n){
temp[k++]=a[j++];
}
for(i=0;i<k;i++) //将temp值传回去
a[first+i]=temp[i];
}
void organization(int a[],int first,int last,int tmp[]){
if(first<last){
int mid=(first+last)/2;
organization(a,first,mid,tmp); //左边有序
organization(a,mid+1,last,tmp); //右边有序
organize(a,first,mid,last,tmp);
}
}
void soto(int a[],int n) //归并排序
{
int *p = new int[n];
if(p==NULL) return;
organization(a,0,n-1,p);
delete[] p;
}
int main()
{
int arr[]={4,3,2,1};
int a[]={5,4,3,2,1};
//fn(arr,4);
//insertfn(arr,4);
//choosefn(arr,4);
//quick(arr,0,3);
soto(a,5);
for(int b=0;b<5;b++)
{
cout<<a[b]<<endl;
}
}
都能跑\(-_____-)/