【C++】简单基础排序算法冒泡选择插入的理解

1.冒泡排序和选择排序:

#include <cstdio>
void selectSort(int a[],int len)
{
    int temp;
    for(int i=0;i<len;i++)
    {
        for(int j=i;j<len;j++)
        {
            if(a[i]>a[j]){
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
            }
        }
    }
}
void bubbleSort(int a[],int len)
{
    int temp;
    for(int i=1;i<len;i++)//i从1开始
    {
        for(int j=0;j<len-i;j++)
        {
            if(a[j]>a[j+1])
            {
                temp=a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
    }
}
void printArray(int a[],int len)
{
    for(int i=0;i<len;i++)
    printf("%4d",a[i]);
}
int main()
{
    int A[10]={8,7,5,6,7,2,3,4,1,0};
    selectSort(A,10);
    printArray(A,10);
    int B[10]={8,7,5,6,7,2,3,4,1,0};
    bubbleSort(B,10);
    printf("\n");
    printArray(B,10);
    return 0;
}

这两个排序很像,到今天之前,说实话我一直没搞清他们两人。一直把选择排序当做冒泡排序来用。

冒泡排序:最大的向后走,即每次最后一个变成有序的,相当于有序集合在后面不断壮大。

选择排序:最小的向前走,每次和第一个比较,将最小的放在第一个位置,前面是有序集合,后面继续生产最小的放在前面。

感觉都和吐泡泡差不多。

2.直接插入排序

#include <cstdio>

void insertSort(int a[],int len)
{
    int temp,j;
    for(int i=1;i<len;i++)//i是那条线,不断向右移动
    {
        temp=a[i],j=i;//j是那条线的影子,向前扫描,给插入的元素挪位置,整肃风气
        while(j>0&&temp<a[j-1]){
            a[j]=a[j-1];
            j--;
        }
        a[j]=temp;
    }
}
int main()
{
    int A[10]={7,6,5,4,2,3,1,8,9,0};
    insertSort(A,10);
    for(int i=0;i<10;i++)
    {
        printf("%4d",A[i]);
    }
    return 0;
}

这种简单的排序算法如果弄懂原理,都很简单。主要脑海中要有一个排序算法的图,然后清楚设置变量的含义对应着什么,它可以做什么。

在这里直接插入算法有一个分割线,这个线不断的向后移动,线前面的都是有序的,线后面的一个元素和前面的元素进行比较,利用一个for循环,定位了位置之后,可以在里面添加一个while循环,将前面的元素挪动位置,大于线后元素的都向后移,(最后一个有序移动到线后的位置,原来待插入的先保存起来。)这样就可以把元素插进去了。

如此往复不断扩大自己的范围。

自己的理解:这三种简单排序算法看起来都是一种不断扩大自己范围的写法。

冒泡,向右走每相邻的两个比较,最大的放到最后面,有序范围在最后不断扩大。

选择,最左面是利用for循环有序的范围逐渐扩大,从后面选出一个最小的(用for循环),放到前面有序范围的屁股后面,或者说和无序的第一个位置交换。

插入,线向右走,线后元素利用for循环比较线前有序范围,找到插入位置,利用while循环后移元素腾出位置,插入进去即可。保证线前都是有序,线后还未排序,但逐个吸入。这里的线就是外层for循环的i;

发布了68 篇原创文章 · 获赞 20 · 访问量 6882

猜你喜欢

转载自blog.csdn.net/qq_43633973/article/details/102651392