c++ 实现插入排序,以及快排

#include <iostream>
using namespace std;


//插入排序
void insertsort(int *a,int num)
{
    int in,out;
    for(out=1;out<num;out++)
    {
        int temp=a[out];
        in=out;
        while (in>0 &&a[in-1]>temp)
        {
            a[in]=a[in-1];
            in--;
        }
        a[in]=temp;
    }
}

//模板插入排序
template <class T>
void insertsort_tem(T *a,int num)
{
    int in,out;
    for(out=1;out<num;out++)
    {
        in=out;
        int temp=a[out];
        while (in>0 && a[in-1]>temp)
        {
            a[in]=a[in-1];
            in--;
        }
        a[in]=temp;
    }
}
//快速排序 (速度最快的排序算法)
//枢纽 选择一个枢纽
//递归

//template <class T>
void fastsort(int *a, const int left, const int right)
{
    if (left<right)
    {
        //选枢轴进行划分
        int i=left+1;
        int j=right;
        int privot=a[right];//选择最有边元素为枢纽 找左边大于枢纽的,右边小于枢纽的
        do{
            do i++;while (a[i]<privot);
            do j--;while (a[j]>privot);
            if (i<j) swap(a[i],a[j]);

        }
        while (i<j);
        swap(a[left],a[j]);

        //进行递归 小于枢轴的在左边,大于枢轴的在右边

        fastsort(a,left,j-1);
        fastsort(a,j+1,right);
    }
}





void myfastsort(int *a,int l,int r)
{
    int i=l;
    int j=r;
    int pivot=a[r];

    while (i<j)
    {

        while (a[i]<pivot)
        {
            i++;
        }
        while (a[j]>pivot)
        {
            j--;
        }

        swap(a[i],a[j]);

    }
    swap(a[r],a[j]);
    myfastsort(a,l,j-1);
    myfastsort(a,j+1,r);

}

//归并排序






int main() {
    int list[]={12,3,4,5,6,3,8,9,76,56,34};
    double list1[]={1.2,3.4,1.23,3,0.6,4,6,78};
    int list3[]={100,2,7,3,45,67,34,23,22,41,88};
    int num= sizeof(list)/ sizeof(int);
    int num1= sizeof(list1)/ sizeof(double);

    cout<<"num1= "<<num1<<endl;
    insertsort_tem(list,num);

    for (int i = 0; i <num ; ++i) {
        cout<<list[i]<<" ";
    }
    cout<<endl;
    cout<<"-----------------------------"<<endl;

    insertsort_tem(list1,num1);
    for (int j = 0; j <num1 ; ++j) {

        cout<<list1[j]<<" ";
    }
    cout<<endl;

    cout<<"----------------------------------"<<endl;
    fastsort(list3,1,10);

    for (int j = 0; j <11 ; j++) {

        cout<<list3[j]<<" ";
    }
    cout<<endl;



    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值