• 几个简单的排序方法


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

    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);  

  • 相关阅读:
    回顾C#3.0新特性(3)
    第五周作业
    第六周基础作业
    第三周syh
    基础作业
    第七周作业
    2019年春季学期第四周作业
    第八周作业
    .Net 反射
    C#中SqlParameter
  • 原文地址:https://www.cnblogs.com/wangshen31/p/6283378.html
Copyright © 2020-2023  润新知