一、选择排序

  1)图解

    

 

 

                                            将上面的的这个图用选择排序,那么将是如下的方式来进行排序,看下图

  

上图用第一个元素依次和后面所有数进行比较,交换后的结果为

 

 

 

 

以此类推,用第二个数、第三个数、第四个数与后面的数进行比较

                                                   

 

 

 

 

好了,到这里想必大家都明白了大概是怎么实现的了,现在我们就进入代码区来进行实现

 

   2)代码(C语言)

    

#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[]){
    int arr[] = {1,5,3,2,4};
    int temp;
    int len = sizeof(arr)/sizeof(int);
    for (int i = 0; i < len; i++)
    {
        for (int j = i + 1; j < len; j++)
        {
            if(arr[i]<arr[j]){
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        
    }
    for (int i = 0; i < len; i++)
    {
        printf("%d",arr[i]);    //输出结果就是5 4 3 2 1
    }
}

这里我就不做过多解释了,代码实现相对比较的简单

二、冒泡排序

  1)图解

    还是拿上面的那个图来讲解


                                                                                 第一轮我们先画出来,选择最小的元素排在最后,以此两个数进行比较

   第二轮后面的依次类推,方式是一样的。

 

 

    第二轮结果   第三轮结果因为数字的特殊性,现在已经排好序,但是后面那一轮比较还是会进行的。

 

 

 

 

 

 

 

    上面就是我们第一轮要进行排序的结果,总的次数是(n-1),我么把次数当成m,那么每轮的次数就是(n - m),意思就是我们排一个数后,每次轮训的次数就要减少,比如说上面它的次数就是4(第一轮)->3(第二轮)->2(第三轮)->1(第四轮)

  2)代码

#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[]){
    int arr[] = {1,5,3,2,4};
    int temp;
    int len = sizeof(arr)/sizeof(int);
    for (int i = 0; i < len; i++)
    {
        for (int j = 0; j < len - i; j++)   //代码主要是这里的不同
        {
            if(arr[j]<arr[j+1]){
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
        
    }
    for (int i = 0; i < len; i++)
    {
        printf("%d",arr[i]);    //输出结果就是5 4 3 2 1
    }
}

代码还是相对的比较简单,也不做过的解释了哈,图解已经把这个原理说的比较的清楚了。

三、插入排序

  1)图解

    上原图

 

 

 

 它的原理:就是拿一个数出来和前面的进行比较,如果刚好是小于前面的这个数,那么就插入到这个数的前面去

为方便理解,我们就从小到大进行排序,接下来看图

  

 

 

 好了以上就是我们的插入排序,是不是也并不复杂,那么接下来就是写代码的时候

  2)代码

#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[]){
    int arr[] = {1,5,3,2,4};
    int temp;
    int len = sizeof(arr)/sizeof(int);
    for (int i = 0; i < len; i++)
    {
        temp = arr[i];
        int j;
        for (j = i; j > 0; j--)
        {
            if(temp < arr[j-1]){   //比较这个数小于前面的数就将前面这个数后移一位        否则就结束循环
                arr[j] = arr[j-1];
            }
            else break;
        }
        arr[j] = temp;
        
    }
    for (int i = 0; i < len; i++)
    {
        printf("%d",arr[i]);    //输出结果就是5 4 3 2 1
    }
}

 

四、小总结

  我们不难看出这些排序都是我们基本需要掌握的知识,那么至于性能的话可能不是特别的好,如果需要性能更加的优化,就需要学习其它的算法。这里排版可能不是太好,还请见谅。

 

posted on 2020-05-17 12:01  镇宁  阅读(231)  评论(0编辑  收藏  举报