排序 有待补充

来源:互联网 发布:几大网络手机卡对比 编辑:程序博客网 时间:2024/05/29 11:22
1.冒泡排序
   冒泡排序重复的走过要排序的数列,一次比较两个相邻的元素,如果顺序错误就调换顺序,重进行直到数列排序完成 
   两个循环,外层循环控制循环的次数,如m个数需要m-1次外层循环,将最小或最大值一次移到最左或最右边,内层循环控制每次交换的元素,并且将最大最小值移走
int bubble_sort(int *a,int len)
{
    int i,j,temp;
    1./*for(i=len-1;i>0;i--) //从len-1开始循环
    for(j=0;j<=i;j++) j到i时a[i]就为当次排序的最大值
    if(a[j]>a[j+1])
    {
        temp=a[j];a[j]=a[j+1];a[j+1]=temp;
    }*/
    2./*for(i=0;i<len;i++) //从i=0开始
    for(j=0;j<len-i;j++) //j从最大值一次减小
    if(a[j]>a[j+1])
    {
        temp=a[j];a[j]=a[j+1];a[j+1]=temp;
    } */
    return 1;
}


2.选择排序
     在所有排序数组元素中先找到最小的,然后放到第一个位置,之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。 所有序列中先找到最小的,然后放到第一个位置。 
int select_sort(int *a,int len)
{
    int i,j,temp;
    for(i=0;i<len;i++)
    for(j=i+1;j<len;j++)
    if(a[i]>a[j]) //a[i]与a[j]比较不符合排序顺序则交换,每个a[i]都是当次循环的最小值或最大值
    {
        temp=a[j];a[j]=a[i];a[i]=temp;
    }
    return 1;
}

3.直接插入排序
       基本方法:每一次将一个待排序的元素,插入到前面一组已经排好需的一组元素的适当位置上,直到元素全部插入为止,第i个元素插入时前面第i-1个元素已排好序,第i个元素找到合适的位置时,后面的元素从后往前依次向后移。
int insert_sort(int *a,int len)
{
    int i,temp,j;
    for(i=1;i<len;i++) //从一开始,第0个元素(只有一个元素)已经排好序
    {
        temp=a[i]; //第i个元素,前面元素已排好序
        j=i-1; //与前一个元素相比较
        while(j>=0&&a[j]>temp) //如果前一个元素满足大于比较元素(第i个元素),则前面元素依次往后换
        {
            a[j+1]=a[j];
            j--; //继续与前面元素比较  (最后第i个元素插入时定位到第i个元素顺序的前一个位置)
        }
        a[j+1]=temp; //则之前的第i个元素插入到适当位置
    }
    return 1;
}

         
4.希尔排序
       希尔排序是对直接插入排序的改进,实质就是分组插入排序。基本思想是将全部元素分为若干个子序列(由相隔某个增量gap的元素组成,通常由gap=len/2开始),分别进行直接插入排序,然后依次缩减增量。直到增量gap足够小时(最小gap=1),相当于再对全体元素进行一次直接插入排序
                                                                
 算法实现
void shell_sort(int *a,int len)
{
    int i,j,temp,gap;//gap为增量,记录每次需要直接插入排序的元素的距离
    for(gap=len/2;gap>0;gap=gap/2) //gap通常从len/2开始,最小到1
    {
        for(i=gap;i<len;i++) //从gap开始插入排序,每次有gap对 数需要插入排序
        {
            j=i-gap; //接下来就是直接插入排序的原理
            temp=a[i];
            while(j>=0&&temp<a[j])
            {
                a[j+gap]=a[j];
                j=j-gap;
            }
            a[j+gap]=temp;
        }
    }
}







0 0