zoukankan      html  css  js  c++  java
  • 排序

    面试中经常会使用排序,而冒泡是最常见的:

    我正好整理一份出来,两个排序方法+介绍如下:

    //选择排序


    #include<stdio.h>

    void sort(int* pArr,int len);//冒泡
    void Print(int* pArr,int len);//回显数据


    int main()
    {
    int array[10]={1,3,4,2,7,6,5,55,9,8};

    sort(array,10);
    Print(array,10);

    return 0;
    }
    void Print(int* pArr,int len)
    {
    int i=0;
    for(i=0;i<len;i++)
    {
    printf("%d ",pArr[i]);
    }
    printf(" ");
    }

    void sort(int* pArr,int len)
    {
    int i,j,t;
    for(i=0;i<len-1;i++)//因为到最后哪一个数字是没有跟他比较的对象,所以这里可以-1
    {
      for(j=i+1;j<len;j++)
      {
        if(pArr[i] > pArr[j])
        {
          t = pArr[i];
          pArr[i]=pArr[j];
          pArr[j]=t;
        }
      }
    }
    }


    root@aiyq195-virtual-machine:/home/aiyq195/桌面/sor# ./sor
    1 2 3 4 5 6 7 8 9 55


    //冒泡排序

    #include<stdio.h>

    void sort(int* pArr,int len);//冒泡
    void Print(int* pArr,int len);//回显数据

    int main()
    {
    int array[10]={1,3,4,2,7,6,5,55,9,8};
    sort(array,10);
    Print(array,10);
    return 0;
    }

    void Print(int* pArr,int len)
    {
    int i=0;
    for(i=0;i<len;i++)
    {
    printf("%d ",pArr[i]);
    }
    printf(" ");
    }

    /*
    因为冒泡排序,是将一排数字,将他们从第一个开始与后面的排序,如果
    它小于后面的,则与它后面的更换位置,这样,就造成了一个现象,就是一轮排序后,
    这拍数字最后一位应该是最大的,所以,在第二轮的排序中,最后一个就不用再次参加;
    所以,有了
    for(i=0;i<len-1;i++)
    {
    for(j=0;j<len-1-i;j++)
    中的j<len-i
    而其中的-1,是因为下面的比较中,
    是if(pArr[j] > pArr[j+1])
    如果j=8,它就会跟底标为9的比较,所以,第9个没有比较的意义;故-1
    成了如下
    for(i=0;i<len-1;i++)
    {
    for(j=0;j<len-1-i;j++)
    */
    void sort(int* pArr,int len)
    {
    int i,j,t;
    for(i=0;i<len-1;i++)
    {
    for(j=0;j<len-1-i;j++)
    //因为冒泡排序,所以,当数组开始排序的时候,越往后的越大,也就是后面的不用再次参与到排序中了;
    {
    if(pArr[j] > pArr[j+1])
    {
    t = pArr[j];
    pArr[j]=pArr[j+1];
    pArr[j+1]=t;
    }
    }
    }
    }

    root@aiyq195-virtual-machine:/home/aiyq195/桌面/sor# ./sor1
    1 2 3 4 5 6 7 8 9 55

    //倒序选择排序


    #include<stdio.h>

    void sort(int* pArr,int len);//冒泡
    void Print(int* pArr,int len);//回显数据

    int main()
    {
    int array[10]={1,3,4,2,7,6,5,55,9,8};

    sort(array,10);
    Print(array,10);

    return 0;
    }
    void Print(int* pArr,int len)
    {
    int i=0;
    for(i=0;i<len;i++)
    {
    printf("%d ",pArr[i]);
    }
    printf(" ");
    }

    void sort(int* pArr,int len)
    {
    int i,j,t;
    for(i=0;i<len-1;i++)//因为到最后哪一个数字是没有跟他比较的对象,所以这里可以-1
    {
    for(j=i+1;j<len;j++)
    {
    if(pArr[i] < pArr[j])
    {
    t = pArr[i];
    pArr[i]=pArr[j];
    pArr[j]=t;
    }
    }
    }
    }


    root@aiyq195-virtual-machine:/home/aiyq195/桌面/sor# vi sor2.c
    root@aiyq195-virtual-machine:/home/aiyq195/桌面/sor# gcc sor2.c -o sor2
    root@aiyq195-virtual-machine:/home/aiyq195/桌面/sor# ./sor2
    55 9 8 7 6 5 4 3 2 1

  • 相关阅读:
    chroot 与 jail
    3-07. 求前缀表达式的值(25) (ZJU_PAT数学)
    一种监控全部账户登陆及操作命令的方法
    怎样设计接口?
    UVA10869
    网络直播电视之M3U8解析篇 (下)
    LCD显示--Ht1621b芯片显示屏驱动
    混淆
    android 调试
    eclipse+webservice开发实例
  • 原文地址:https://www.cnblogs.com/aiyq195/p/6429806.html
Copyright © 2011-2022 走看看