2021-01-19

編程学习历程

今天学习到了除冒泡排序外的另一种排序方法——直接选择排序。
直接选择排序是一种简单的排序方法。例如,要将一个包含n个元素的数组的各元素从小到大排序,其工作过程是:首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序的元素中继续寻找最小元素,放到排序序列的起始。以此类推,直到排序完毕。

#include<iostream.h>
#define SIZE 8

int main()
{
    int a[SIZE]={18,35,36,61,9,112,77,12};
    for(int i=0;i<SIZE-1;i++)
    {
        int min=i;
        for(int j=i+1;j<SIZE;j++)
        {
            if(a[j]<a[min])
                min=j;
        }
        int temp=a[i];
        a[i]=a[min];
        a[min]=temp;
        cout<<"After No."<<i+1<<"scan:";
        for(int index=0;index<=SIZE-1;index++)
            if(index==i+1)
                cout<<"\t"<<"["<<a[index];
            else
                cout<<"\t"<<a[index];
        cout<<"]"<<endl;
    }
    cout<<"After sorting:\t";
    for(int index=0;index<=SIZE-1;index++)
        cout<<"\t"<<a[index];
    cout<<endl;
    return 0;
}    

在这里插入图片描述
用C语言写了一下quicksort,快排中主要运用了二分和递归的方法,下面来看一下例题:
题目描述
利用快速排序算法将读入的 N 个数从小到大排序后输出。

快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++C++ 选手请不要试图使用 STL,虽然你可以使用 sort 一遍过,但是你并没有掌握快速排序算法的精髓。)

输入格式
第 1 行为一个正整数 N,第 2行包含 N个空格隔开的正整数 ai ,为你需要进行排序的数,数据保证了 Ai不超过 10^9。

输出格式
将给定的 NN 个数从小到大输出,数之间空格隔开,行末换行且无空格。
输入输出样例
输入
5
4 2 4 5 1
输出
1 2 4 4 5

#include<iostream>
using namespace std;
int n,a[1000001];
void qsort(int l,int r)//应用二分思想
{
    int mid=a[(l+r)/2];//中间数
    int i=l,j=r;
    do{
        while(a[i]<mid) i++;//查找左半部分比中间数大的数
        while(a[j]>mid) j--;//查找右半部分比中间数小的数
        if(i<=j)//如果有一组不满足排序条件(左小右大)的数
        {
            swap(a[i],a[j]);//交换
            i++;
            j--;
        }
    }while(i<=j);//这里注意要有=
    if(l<j) qsort(l,j);//递归搜索左半部分
    if(i<r) qsort(i,r);//递归搜索右半部分
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    qsort(1,n);
    for(int i=1;i<=n;i++) cout<<a[i]<<" ";
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值