zoukankan      html  css  js  c++  java
  • 几个简单的排序方法

    一个学期的学习后掌握一下三种排序方法

    1.冒泡:

    设有n个数要排列:有数组a[x]

    int i,j,temp;

    for(j=0;j<n-1;j++) //一共比较n-1趟

      for(i=0;i<n-1-j;i++)  //每一趟比较那么多次

        if(a[i]>a[i+1])

        {

          temp=a[i];

          a[i]=a[i+1];

          a[i+1]=temp;

        }

      }

    冒泡的一种更好理解的写法:

    /*总的来说还是一样,这里要进行n-1趟排序,但这种可以更好地用冒泡的思想去理解,每趟比较的任务,就是让j号元素称为最大的那个元素,就是一趟比较过后,要让j号元素之前的最大的那个元素“冒”上来。因此j自然一开始就等于n-1(最后那个元素嘛)*/
    for(j = n-1; j >0 ; j --) { 
        /*这里就是每一趟里面的比较操作了,你就想着,每一次都要从头开始一直比,比到j号元素,就是要求最大元素冒出来的位置就行,然后就自然i一开始=0,小于j*/
      for(i = 0; i < j; i ++) {
         if(a[i]>a[i+1]) {
             temp = a[i];
             a[i] = a[i+1];
             a[i+1] = temp; 
         }                        
      }  
    }        

    2.选择法:有数组a[x],设有n个数要排列

    int i,j,k,temp;

    for(i=0;i<n-1;i++)

    {

      k=i;

      for(j=i+1;j<n;j++)

        if(a[j]<a[k])k=j;

      if(k!=i)

      {

        temp=a[i];

        a[i]=a[k];

        a[k]=temp;

      }

    }      

    3.桶排序: 设排5个10以内的数先

    int a[11]={0},i,j,t;//先使a全为0

    for(i=0;i<5;i++)

    {

      scanf("%d",&t);

      a[t]++;

    }

     for(i=0;i<11;i++)  //依次判断a[0]~a[10]  

       for(j=1;j<=a[i];j++)  //出现了几次就打印几次  

        printf("%d  ",i);  

  • 相关阅读:
    Vue入门
    吃透SprinngBoot
    SSM整合详解
    Linux查找端口并关闭
    接入腾讯云的OCR识别身份证信息
    IDEA 快捷键《宋红康版》
    Mysql详解
    docker常见命令
    SpringBoot集成Redis
    使用mybatis出现异常
  • 原文地址:https://www.cnblogs.com/wangshen31/p/6283378.html
Copyright © 2011-2022 走看看