zoukankan      html  css  js  c++  java
  • 数据结构--实验5---排序(c)

    仅供参考

      1 #include  "stdio.h"
      2 #include  "stdlib.h"
      3 #include  "iomanip.h"
      4 #include  "time.h"
      5 #include "iostream.h"
      6 const   int  N=150000;
      7 #define  ElemType  int
      8 void insertsort(ElemType R[],int n)      //直接插入排序
      9 {  for ( int i=1; i<n; i++)        //i表示插入次数,共进行n-1次插入
     10    { ElemType temp=R[i];        //把待排序元素赋给temp
     11     int j=i-1; 
     12     while ((j>=0)&& (temp<R[j]))
     13  {      R[j+1]=R[j]; j--; }              // 顺序比较和移动
     14         R[j+1]=temp;}
     15 }
     16 
     17 void BinaryInsertSort(ElemType R[],int n)    //二分插入排序
     18 {   for(int i=1; i<n; i++)                      //共进行n-1次插入
     19   { int left=0,right=i-1;ElemType temp=R[i];
     20     while(left<=right)
     21     {  int middle=(left+right)/2;             //取中点       
     22        if(temp<R[middle]) right=middle-1;    //取左区间
     23        else   left=middle+1; }               //取右区间
     24      for(int j=i-1;j>=left;j--)     
     25 R[j+1]=R[j];    //元素后移空出插入位
     26       R[left]=temp;  }
     27 }
     28 
     29 void Bubblesort(ElemType R[],int n)          //冒泡排序
     30 {  int flag=1;  //当flag为0则停止排序
     31   for  (int i=1; i<n; i++)                //i表示趟数,最多n-1趟
     32   {
     33     flag=0;                               //开始时元素未交换
     34     for (int j=n-1; j>=i; j--)  
     35       if (R[j]<R[j-1])                      //发生逆序      
     36        {  ElemType t=R[j];
     37       R[j]=R[j-1];
     38       R[j-1]=t;flag=1; }                    //交换,并标记发生了交换
     39           if (flag==0)  return;      }
     40 }   
     41  
     42 void   selectsort(ElemType R[],int n)      //直接选择排序
     43 {  int  i,j,m;
     44    ElemType t;
     45    for ( i=0;i<n-1; i++ )
     46    {   m=i ;
     47        for ( j=i+1;j<n;j++ )
     48          if  ( R[j]<R[m] )  m=j  ;
     49        if ( m!=i )  { t=R[i] ; R[i]=R[m] ; R[m]=t ;  }
     50     }
     51 } 
     52 int quick_once(ElemType R[],int low,int high){
     53         ElemType t=R[low];
     54         while(R[high]>=t&&high>low){
     55             high--;
     56             R[low]=R[high];
     57         
     58         
     59         while(R[low]<=t&&low<high)
     60             low++;
     61             R[high]=R[low];
     62         }
     63         R[high]=t;
     64         return high;
     65 
     66 
     67 }
     68 void quicksort(ElemType R[],int low,int high)
     69 {
     70     int mid;
     71     if(low>=high)
     72         return;
     73     mid=quick_once(R,low,high);
     74     quicksort(R,low,mid-1);
     75     quicksort(R,mid+1,high);
     76     return;
     77 
     78 }
     79 void Shellsort(ElemType R[],int n)
     80 {
     81     int i,j;
     82     ElemType t;
     83     for(int d=n/2;d>1;d/=2)
     84     for(int j=d;j<n;j++)
     85         t=R[j];
     86         while(i>0&&i-d>0&&R[i]<R[i-d]){
     87             R[i]=R[i-d];
     88         R[i]=t;
     89     }
     90 
     91 
     92 }
     93 void print(ElemType R[],int n)            //打印数组
     94 {
     95    for(int i=0;i<n;i++)
     96    {  if (i%10==0)  printf("
    ");
     97       printf("%7d",R[i]);
     98    }
     99    printf("
    ");
    100 }
    101 void main()
    102 {   int sele;
    103     ElemType R[N],T[N];
    104     int n,k;
    105     long  t1,t2;
    106     double  tt;
    107     srand(1);
    108     for(int i=0;i<N;i++)  T[i]=rand();     //产生10000个随机数
    109     print(T,N);
    110     printf("
    
    
    
    ");
    111     printf("		       排序 子系统
    ");
    112     printf("		*****************************
    ");
    113     printf("		*     1----直接插入排序    *
    ");
    114     printf("		*     2----二分插入排序   *
    ");
    115     printf("		*     3----冒 泡 排 序    *
    ");
    116     printf("		*     4----直接选择排序   *
    ");
    117     printf("		*     5------  希尔排序   *
    ");
    118     printf("		*     6------- 快速排序   *
    ");
    119     printf("		*     6------- 排序   *
    ");
    120     printf("		*     0----返  回      *
    ");
    121     printf("		*****************************
    ");
    122     do 
    123     {          
    124         printf("		   请选择菜单项(0-6):");
    125         scanf("%d",&k);
    126            for(int i=0;i<N;i++)  R[i]=T[i];
    127         t1=time(NULL); 
    128         switch(k)
    129         {    case 1:
    130             insertsort(R,N);
    131             t2=time(NULL);tt=difftime(t2,t1);
    132             cout<<"直接插入排序的时间是:";
    133             cout<<tt<<endl;
    134             break;
    135         case 2:
    136             BinaryInsertSort(R,N);
    137             t2=time(NULL);tt=difftime(t2,t1);
    138              cout<<"二分插入排序的时间为:"<<tt<<endl;break;
    139         case 3:
    140             Bubblesort(R,N);
    141             t2=time(NULL);tt=difftime(t2,t1);
    142              cout<<"冒泡排序的时间为:"<<tt<<endl;break;
    143         case 4:
    144             selectsort(R,N);
    145             t2=time(NULL);tt=difftime(t2,t1);
    146              cout<<"直接选择排序的时间为:"<<tt<<endl;
    147         case 5:
    148             Shellsort(R,N);
    149             t2=time(NULL);tt=difftime(t2,t1);
    150             cout<<"希尔排序的时间为:"<<tt<<endl;break;
    151             case 6:
    152             quicksort(R,0,N);
    153             t2=time(NULL);tt=difftime(t2,t1);
    154             cout<<"快速排序的时间为:"<<tt<<endl;break;
    155        }
    156     }while(k);
    157 
    158 }
    不经一番彻骨寒,哪有梅花扑鼻香?
  • 相关阅读:
    CSpinButtonCtrl控件的使用
    JS基础语法
    JS
    层级,hover
    Html&Css
    定位
    制作静态网页
    查看trunk端口
    配置vlan trunk
    js日期的写法,获取girdviw的行数、提示信息、验证数量信息
  • 原文地址:https://www.cnblogs.com/zongyao/p/9255397.html
Copyright © 2011-2022 走看看