欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

多种排序算法c++(冒泡排序、直接插入排序、快排算法、直接选择、归并排序)

程序员文章站 2022-03-22 09:18:15
...
#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;
    }

}

都能跑\(-_____-)/

相关标签: 排序