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 }
    不经一番彻骨寒,哪有梅花扑鼻香?
  • 相关阅读:
    pip不是内部或外部命令也不是可运行的程序或批处理文件的问题
    动态规划 leetcode 343,279,91 & 639. Decode Ways,62,63,198
    动态规划 70.climbing Stairs ,120,64
    (双指针+链表) leetcode 19. Remove Nth Node from End of List,61. Rotate List,143. Reorder List,234. Palindrome Linked List
    建立链表的虚拟头结点 203 Remove Linked List Element,82,147,148,237
    链表 206 Reverse Linked List, 92,86, 328, 2, 445
    (数组,哈希表) 219.Contains Duplicate(2),217 Contain Duplicate, 220(3)
    重装系统
    java常用IO
    端口
  • 原文地址:https://www.cnblogs.com/zongyao/p/9255397.html
Copyright © 2011-2022 走看看