三种基本排序:冒泡排序、选择排序、插入排序

第一次写博客,如果有错误,欢迎大家指出,谢谢。

1、选择排序:假设数组的长度为N。

Step1:首先在0~N-1的位置上找最小的元素,将最小的元素与0位置的元素交换。

Step2:然后在1~N-1的位置上找最小的元素,将最小的元素与1位置的元素交换。

......

StepN:区间变为1个元素,结束。

选择排序的实质就是,不停的遍历,依次将最小的元素放在区间开头,然后不停的向后缩小区间。

2、冒泡排序:假设数组的长度为N。

Step1:从前往后两两比较,将大值放在右边,这样遍历一次就可以把全局最大值放在区间最右边。

Step2:将区间缩短一个单位,继续从前往后比较,这一次是区间0~N-2。

......

StepN:遍历N次,区间缩短成1个单位,结束。


3、插入排序

插入排序和扑克牌理牌类似,每次认为指针左边的数列是有序数列,设置哨兵保存当前指针指向的数据,依次拿哨兵和左边的有序数列比较,如果哨兵>递减值,那么左边数列依次右移,直到哨兵>=递减值火车递减完成,就将哨兵的值插入递减指针指向的后一位。


程序贴在下方,经验证,排序成功。

#include<iostream>
using namespace std;
#define N 12

void BubbleSort(int *a,int length)
{    
    for(int i=length-1;i>=0;i--)
    {
        for(int j=0;j+1<=i;j++)
        {
            if(a[j]>a[j+1])
            {
                int swap = a[j];
                a[j] = a[j+1];
                a[j+1] = swap;
            }
        }
    }
}

void ChooseSort(int *a,int length)
{
    for(int i=0;i<length;i++)
    {
        int idx=0;
        int flag=0;
        int min=a[i];
        for(int j=i;j<length;j++)
        {
            if(a[j] < min)
            {
                idx = j;
                min = a[j];
                flag =1;
            }
        
        }
        if(flag ==1)
        {
            int swap = a[idx];
            a[idx] = a[i];
            a[i] = swap;
        }
    }
}

void InsertSort(int *a, int length)
{
    for(int i=1;i<length;i++)
    {
        int tmp = a[i];
        int j=0;
        for(j=i-1;j>=0 && tmp < a[j];j--)
        {
            a[j+1] = a[j];
        }
        a[j+1] = tmp;
    }
}
void ArrayCopy(int *a, int *b, int length)
{
    for(int i=0;i<length;i++)
    {
        b[i] = a[i];
    }
}

void printArray(int *a, int length)
{
    for(int i=0;i<length;i++)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;
}
int main()
{
    int input[N]={5,4,3,2,1,7,9,8,0,11,15,21};
    int cinput[N]={0},cinput2[N]={0};
    ArrayCopy(input,cinput,N);
    ArrayCopy(input,cinput2,N);
    
    BubbleSort(input,N);
    ChooseSort(cinput,N);
    InsertSort(cinput2,N);
    
    printArray(input,N);
    printArray(cinput,N);
    printArray(cinput2,N);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/u014228447/article/details/80614557
今日推荐