• 数据排序


    此例中使用两重循环来实现排序。但是值得注意的是以上程序执行时元素的交换并不都是必须的。
    #include <stdio.h>
    #include 
    <conio.h>
    #define N 10
    void main()
    {
      
    int i,j,t;
      
    int a[N];
      clrscr();
      
    for(i=0;i<N;i++)
        scanf(
    "%d",&a[i]);
      
    for(i=0;i<N-1;i++)
        
    for(j=i+1;j<N;j++)
          
    if(a[i]<a[j])
            
    {
             t
    =a[i];
             a[i]
    =a[j];
             a[j]
    =t;
            }

      printf(
    "\n");
      
    for(i=0;i<N;i++) printf("%-6d",a[i]);
    }

    事实上,只要记住比较时大元素的位置,即序号,在内循环结束后做一次交换即可,从而提高程序执行的效率。
    #include <stdio.h>
    #include 
    <conio.h>
    #define N 10
    void main()
    {
      
    int i,j,t,k;
      
    int a[N];
      clrscr();
      
    for(i=0;i<N;i++)    scanf("%d",&a[i]);
      
    for(i=0;i<N-1;i++)
        
    {k=i;
         
    for(j=i+1;j<N;j++)
           
    if(a[k]<a[j]) k=j;
         
    if(k!=i)
           
    {
            t
    =a[i];
            a[i]
    =a[k];
            a[k]
    =t;
           }

         }

      printf(
    "\n");
      
    for(i=0;i<N;i++) printf("%6d",a[i]);
    }


    经过改进后的程序每选一个元素只交换一次,提高了程序执行效率。
    ***********************************************************
    下面是另外一种排序方法:
    /*用冒泡法将8个数按由小到大排序*/
    /*冒泡法的基本思想是:相邻两数比较,若前面较大,则两数交换位置,直到最后一个元素被处理,
    最大的元素就沉到最下面,即在最后一个元素位置。
    */

    #include 
    <stdio.h>
    #include 
    <conio.h>
    #define N 80
    void sort(int b[],int k);
    void print(int b[],int k);
    void main()
    {
      
    int a[N];
      
    int i,m;
      clrscr();
      printf(
    "Input m(<80):");
      scanf(
    "%d",&m);
      printf(
    "Input numbers:");
      
    for(i=0;i<m;i++)
        scanf(
    "%d",&a[i]);
      sort(a,m);
      print(a,m);
    }


    void sort(int b[],int k)
    {
      
    int i,j,t,flag;
      
    for(j=0;j<k-1;j++)
        
    {
          flag
    =0;
          
    for(i=0;i<k-j-1;i++)
            
    if(b[i]>b[i+1])
              
    {
                t
    =b[i];
                b[i]
    =b[i+1];
                b[i
    +1]=t;
                flag
    =1;
              }

          
    if(flag==0break;
        }

    }


    void print(int b[],int k)
    {
      
    int i;
      
    for(i=0;i<k;i++)
      
    {
        
    if(i%4==0) putchar('\n');
        printf(
    "%-6d",b[i]);
      }

    }

    ****************************************************
    用指针实现选择法排序
    #include "stdio.h"
    #include 
    "conio.h"
    #include 
    "string.h"

    void main()
    {
        
    int data[8],i,*p1,*p2,temp;
        p1
    =data;                   /*p1指向数组data的第一个元素*/
        printf(
    "Input 8 numbers:");
        
    for(i=0;i<8;i++)
        
    {
            scanf(
    "%d",p1);
            p1
    ++;
        }


        
    for(p1=data;p1<data+8-1;p1++)   /*排序从p1指向第一个元素开始,到第n-1个元素结束*/
            
    for(p2=p1+1;p2<data+8;p2++)
                
    if(*p1<*p2)             /*选择比较从p1+1开始,到最后一个元素结束*/
                
    {temp=*p1;*p1=*p2;*p2=temp;}
        
    for(i=0,p1=data;i<8;i++,p1++)
            printf(
    "%6d",*p1);
        getch();
    }
  • 相关阅读:
    java笔记使用线程池优化多线程编程
    java笔记查看和修改线程名称
    java笔记查看和修改线程的优先级
    java笔记策略模式和简单工厂模式
    java笔记用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程
    java笔记枚举总结与详解
    java笔记关于克隆技术
    java笔记反射机制之基础总结与详解
    java笔记使用事件分配线程更新Swing控件
    java笔记关于int和byte[]的转换
  • 原文地址:https://www.cnblogs.com/qixin622/p/621351.html
Copyright © 2020-2023  润新知