插入排序+冒泡排序+选择排序

Posted gavanwanggw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入排序+冒泡排序+选择排序相关的知识,希望对你有一定的参考价值。

插入排序的工作机理和打牌时。整理手中的排做法差点儿相同。在開始摸牌的是,我们的左手是空的,排名朝下放在桌上,接着,一次从桌上摸一张牌,并将它插入左手排的正确位置上。

为了找到这张牌的正确位置,要将他和手中的没一张哦从右到左进行比較。不管什么时候,左手中的牌都是排好序的。(出自:算法导论)
比如:5,4,6,2,7,3,4,1
5—>4,5—>4,5,6—>2,4,5,6—>2,4,5,6,7—->2,3,4,5,6,7—->2,3,4,4,5,6,7—->1,2,3,4,4,5,6,7
插入排序(InsertSort):

int InsertSort(int *a,int n){
    //对长度为n的数组,进行插入排序,下标0~n-1
    int i,j,key;
    for(j=1;j<n;j++){
        key=a[j];
        i=j-1;
        while(i>=0&&a[i]>key){//从右到左比較。当前元素大于关键值,当前元素后移
            a[i+1]=a[i];
            i--;
        }
        //i==-1(全部元素后移)||a[i]<=key,key插入到i+1位置
        a[i+1]=key;
    }
    return 0;
}

冒泡排序:从n開始到下标1每次交换反序的两个相邻元素
这里仅仅给出第一趟交换:
5,4,6,2,7,3,4,1—->5,4,6,2,7,3,1,4—>5,4,6,2,7,1,3,4—>5,4,6,2,1,7,3,4—>5,4,6,1,2,7,3,4—>5,4,1,6,2,7,3,4—>5,1,4,6,2,7,3,4—>1,5,4,6,2,7,3,4

冒泡排序(BubbleSort):

/**
 *调用函数的方式BubbleSort(A,n):排序数组A[1..n];
 *这里给出的都是递增排序
 */
int BubbleSort(int *A,int n){
    for(int i=1;i<=n;i++){
        for(int j=n;j>=1;j--){//这里必须从n--1。想想是为什么?
            if(A[j]<A[j-1]) swap(A[j-1],A[j]);
        }
    }
    return 0;
}

选择排序:每次选出剩余数中最小的数放在适当的位置,这里指的是升序排序,对每个A[i],比較i+1—>n的全部元素。将小于A[i]的与A[i]交换位置。
这里仅仅给出第一趟选择:
5,4,6,2,7,3,4,1—->4,5,6,2,7,3,4,1—->4,5,6,2,7,3,4,1—->2,5,6,4,7,3,4,1—->2,5,6,4,7,3,4,1—>2,5,6,4,7,3,4,1—->2,5,6,4,7,3,4,1—->2,5,6,4,7,3,4,1—>1,5,6,4,7,3,4,2

选择排序(SelectionSort):

/**
 *调用函数的方式SelectionSort(A,n):排序数组A[1..n];
 *这里给出的都是递增排序
 */
int SelectionSort(int *A,int n){
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            if(A[j]<A[i]) swap(A[j],A[i]);
        }
    }
    return 0;
}

以上是关于插入排序+冒泡排序+选择排序的主要内容,如果未能解决你的问题,请参考以下文章

三大基础排序算法(冒泡排序,选择排序,插入排序)

排序算法学习(直接插入排序,希尔排序,选择排序,堆排序,冒泡排序)

[leetcode]排序算法(冒泡排序,选择排序,插入排序,快速排序,计数排序)

总结:大厂面试常考手撕代码 —— JavaScript排序算法(冒泡排序选择排序插入排序快速排序)

JavaScript算法(冒泡排序选择排序与插入排序)

直接插入排序 ,折半插入排序 ,简单选择排序, 希尔排序 ,冒泡排序 ,快速排序 ,堆排序 ,归并排序的图示以及代码,十分清楚