码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-03-16 12:56:06      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:插入   算法   排序算法   

插入排序的工作机理和打牌时,整理手中的排做法差不多。在开始摸牌的是,我们的左手是空的,排名朝下放在桌上,接着,一次从桌上摸一张牌,并将它插入左手排的正确位置上。为了找到这张牌的正确位置,要将他和手中的没一张哦从右到左进行比较,无论什么时候,左手中的牌都是排好序的。(出自:算法导论)
例如: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;
}

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

标签:插入   算法   排序算法   

原文地址:http://blog.csdn.net/fool_ran/article/details/44303609

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!