美文网首页
排序算法

排序算法

作者: 小半_7a2b | 来源:发表于2019-04-03 19:52 被阅读0次

    均为C语言实现 操作对象均为一维int型数组

    • 逆序
    int array[5]={1,2,3,4,5};
    int i;
    int len=sizeof(array)/sizeof(array[0]); 
    for(i=0;i<len/2;i++)
    {
      int tmp=array[i];
      array[i]=array[len-i-1];
      array[len-i-1]=array[i];
    }
    
    • 选择排序
    int array[5]={3,4,1,5,2};
    int i,j;
    int len=sizeof(array)/sizeof(array[0]); 
    for (i=0;i<len-1;i++)
      for(j=i+1;j<len;j++)
        {
          if (array[i]>array[j])
          {
          int tmp=array[i];
          array[i]=array[j];
          array[j]=tmp;
          }
        }
    
    • 冒泡排序
    int array[5]={3,4,1,5,2};
    int i,j;
    int len=sizeof(array)/sizeof(array[0]); 
    for (i=0;i<len-1;i++)
      for (j=0;j<len-1-i;j++)
        {
        if (array[j]>array[j+1])
          {
           int tmp=array[j];
           array[j]=array[j+1];
           array[j+1]=tmp;
          }
        }
    

    另一种写法

    int array[5]={3,4,1,5,2};
    int i,j;
    int len=sizeof(array)/sizeof(array[0]); 
    for (i=len-1;i>0;i--)
      for(j=0;j<i;j++)
        {
            if (array[j]>array[j+1])
            {
              int tmp=array[j];
             array[j]=array[j+1];
             array[j+1]=tmp;
            }
        }
    
    • 插入排序
    int array[5]={3,4,1,5,2};
    int i,j;
    int len=sizeof(array)/sizeof(array[0]); 
    int b[len];               //禁止使用类似" b[len]={a[0]}"来初始化
    b[0]=a[0];
    for(i=1;i<len;i++)
    {
        int tmp=a[i];
        j=i;
        while(j>0&&b[j-1]>tmp)
        {
            b[j]=b[j-1];
            j--;
        }                       //找出合适位置  
          b[j]=tmp;
    }
    for(i=0;i<len;i++)              //放回去
        {
        a[i]=b[i];
        }
    
    • 原地插入排序
    int array[5]={3,4,1,5,2};
    int i,j;
    int len=sizeof(array)/sizeof(array[0]); 
    int j;
    for(i=1;i<len;i++)
    {
      int tmp=a[i];
      j=i;
      while(j>0&&a[j-1]>tmp)
      {
          a[j]=a[j-1];
           j--;
       }                        //找出合适位置  
      a[j]=tmp;
    }
    
    
    • 二分法
    int begin,time,end,mid;
    while(1)
    {
        printf("\ninput:\n");
        scanf("%d",&n);
        begin=0,time=0;
        end=sizeof(a)/sizeof(a[0])-1;
        while(begin<=end)
        {
            time++;
            mid=(begin+end)/2;
            if(a[mid]>n)
            {   
                end=mid-1;
            }
            else if(a[mid]<n)
            {
                begin=mid+1;
            }
            else
            {
                break;
            }
        }
        if(begin<=end) 
            printf("Looking for %d times to find \'%d\', located in the %d",time,n,mid);
        else 
            printf("Not Found\n");
    
    

    相关文章

      网友评论

          本文标题:排序算法

          本文链接:https://www.haomeiwen.com/subject/cqbmqqtx.html