初学者必会的几种简单排序(新手入门)(C++)

本文是初学者对几种常见排序算法的总结,包括计数排序、选择排序、冒泡排序、插入排序、快速排序及其优化(三路快排)、归并排序优化。文章详细介绍了每种排序算法的基本思想和代码实现,旨在帮助新手入门。
摘要由CSDN通过智能技术生成

这里介绍几种简单排序,是我身为初学者的一种总结和归纳,如有不足,希望路过的大佬指出

一.计数排序

计数排序是特殊的排序,它不需要比较,以空间换时间的代价换来了高效,但同时也有局限性,首先不能对负数排序,其次对较大的数无能为力,浪费了大量空间,代码如下:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
void countsort(int *arr,int Max,int n)//计数排序
{
   
    int *Count=new int[Max+1];//计数数组
    int *temp=new int[n];//拷贝数组
    memset(Count,0,(Max+1)*sizeof(int));//清空
    memcpy(temp,arr,n*sizeof(int));//拷贝
    for(int i=0;i<n;i++)
    {
   
        Count[arr[i]]++;//计数
    }
    for(int i=1;i<Max+1;i++)
    {
   
        Count[i]=Count[i]+Count[i-1];//计算每个数应放的位置
    }
    for(int i=0;i<n;i++)
    {
   
        arr[Count[temp[i]]-1]=temp[i];//将拷贝数组放入相应的位置
        Count[temp[i]]--;
    }
    delete[]Count;
    delete[]temp;
    Count=NULL;
    temp=NULL;
}
int main()
{
   
    int n;
    cout<<"Input n:";
    cin>>n;
    int *arr=new int[n];
    cout<<"Input "<<n<<" figures:";
    for(int i=0;i<n;i++)
    {
   
        cin>>arr[i];
    }
    int Max=*max_element(arr,arr+n);
    countsort(arr,Max,n);
    cout<<"After countsort:";
    for(int i=0;i<n;i++)
    {
   
        cout<<arr[i]<<" ";
    }
    delete[]arr;
    arr=NULL;
    cout<<endl;
    return 0;
}

二.选择排序

选择排序基本不用解释,是排序中最简单的算法,每个人都有必要掌握,代码如下:

#include<iostream>
#include<algorithm>
using namespace std;
void selectSort(int *arr,int n)
{
   
    for(int i=0;i<n;i++)
    {
   
        int minIndex=i;//最小值下标
        for(int j=i+1;j<n;j++)
        {
   
            if(arr[minIndex]>arr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值