常用的三种排序方法


 比较常用的排序方法分别是:插入排序,选择排序,冒泡排序(最近正好在学习这几种方法)

1.选择排序


思路:①认定一个数为最大数(或者最小数)-> ②找出最大(或者最小数)-> ③交换找出的最大数(或者最小数)与认定的最大数-> ④遍历所有数据

实例:

//选择排序
#include<iostream>
using namespace std;
void swap1(int *a ,int *b);
int main()
{
    int a[5];
    for(int i=0;i<5;i++)
    {
        cin>>a[i];
    }
    //以上部分为输入测试数据,这里以整型数据数组为例
    for(int i=0;i<5;i++)
    {
        int max=a[i];  //认定最大数
        int index=i;  //记录序号 
        for(int k=i+1;k<5;k++)
        {
            if(max<a[k])
            {
                max=a[k];
                index=k;
            } 
        }  //内层循环为找出最大数
            cout<<max<<' ';  //输出目前最大数
            swap1(&a[i],&a[index]);  //交换认定最大数与找出最大数的位置
    }
}
void swap1(int *a ,int *b)  //数据交换函数
{
    int temp;
    temp=*a;
    *a=*b;
    *b=temp;
}

2.插入排序

思路:①确定第一个要排序的数 -> ②确定要排序数的位置

实例:

//插入排序
#include<iostream>

using namespace std;

int main()
{
    int a[5];
    for(int i=0;i<5;i++)
    {
        cin>>a[i];
    }
    for(int i=1;i<5;i++)
    {
        int temp=a[i];  //提取需要比较元素
        int k=i-1;  //需要比较元素往前一个元素的位置,后续再往前比较
        for(;k>=0 && temp<a[k];k--)
        {
            a[k+1] = a[k];  //比temp大的数往后挪位置
        }
        a[k+1]=temp;    //将temp放置于正确位置
    }
    for(int i=0;i<5;i++)
    {
        cout<<a[i]<<' ';
    }

}

3.冒泡排序

思路:①比较相邻两个元素 -> ②按照大小交换位置或者不交换 -> ③n个元素需要n-1轮比较与交换
实例:

//冒泡排序
#include<iostream>

using namespace std;
void swap1(int *a, int *b);

int main()
{
    int a[5];  //
    for(int i=0;i<5;i++)
    {
        cin>>a[i];
    }
    for(int i=1;i<5;i++) //控制总循环次数
    {
        for(int j=0;j<5-i;j++)  //控制单次比较次数
        {
            if(a[j]>a[j+1])
                swap1(&a[j],&a[j+1]);  //元素比较
        }
    }
    for(int i=0;i<5;i++)
    {
        cout<<a[i]<<' ';
    }
}


void swap1(int *a, int *b)
{
    int temp;
    temp=*a;
    *a=*b;
    *b=temp;
}
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容