数据结构算法之排序(一)

好久没写算法  感觉已经生疏了,重新开始写一些。先从简单的开始

冒泡排序和选择排序:选择排序只有找到最小(大)项才交换

void bubble_sort(int array[],int length){
    for(int i=0;i<length;i++){
        for(int j=i+1;j<length;j++){
            if(array[i]>array[j]){
                int tmp=array[i];
                array[i]=array[j];
                array[j]=tmp;
            }
        }
    }
}

void select_sort(int array[],int length){
    if(NULL==array||0==length){
        return;
    }
    for(int i=0;i<length;i++){
        int value=array[i];
        int index=i;
        for(int j=i+1;j<length;j++){
            if(array[j]<value){
                value=array[j];
                index=j;
            }
        }
        array[index]=array[i];
        array[i]=value;
    }
}

插入排序数据逐个插入到已经排好序的队列中的过程

void insert_sort(int array[],int length){
    if(NULL==array||0==length){
        return ;
    }
    for(int i=1;i<10;i++){
        for(int j=i;j>0;j--){
            if(array[j]<array[j-1]){
                int tmp;
                tmp=array[j];
                array[j]=array[j-1];
                array[j-1]=tmp;
            }
        }
    }
}

希尔排序(归并):首先按照一个序列递减的方法逐渐进行排序。比如说有10个数据,我们按照序列5、3、1的顺序进行排序。首先是5,那么我们对1和6、2和7、3和8、4和9、5和10进行排列;第二轮是3,那么对数据1、4、7、10排列,再对2、5、8进行排列,以及3、6、9排列;第三轮就和冒泡排序一样了,以此对每个数据进行排列。它的优势就是让整个队列基本有序,减少数据移动的次数,从而降低算法的计算复杂度。

程序实现过程中,注意最终跳到冒泡排序时的逻辑。

void shell_sort(int array[],int length,int step){
    if(NULL==array||0==length){
        return;
    }
    for(;step>=1;step-=2){
        for(int i=0;i<step;i++){
            for(int j=i;j<length-step;j+=step){
                if(array[j]>array[j+step]){
                    int tmp;
                    tmp=array[j];
                    array[j]=array[j+step];
                    array[j+step]=tmp;
                }
            }
        }
        if(step==2){
            for(int i=0;i<10;i++){
                for(int j=i+1;j<10;j++){
                    if(array[i]>array[j]){
                        int tmp;
                        tmp=array[i];
                        array[i]=array[j];
                        array[j]=tmp;
                    }
                }
            }
        }
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值