毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 课程设计 >> 正文

内部排序演示C++ 第3页

更新时间:2010-1-30:  来源:毕业论文
内部排序演示C++ 第3页
#include <stdio.h>
#define N 100//定义数组最大为100
const int t=3;//定义希尔排序次数
int d[t]={4,3,1};//定义希尔排序比较量
int qmt;//快速排序的移动次数
int qct;//快速排序的比较次数

void output(int n,int a[],int ct,int mt)//内部排序中调用的输出函数
{
       int i;
       printf("\n排序结果:");
       for( i=0;i<n;i++)
              printf("%d ",a[i]);//输出各排序完成的数组
       printf("\n比较次数:%d\n",ct);//输出各排序比较次数
       printf("移动次数:%d\n\n",mt);//输出各排序移动次数
}

void bubble_sort(int n,int A[])//冒泡排序
{
       int mt=0;//移动次数mt=movetime
       int ct=0;//比较次数ct=cmdtime
       int i,j,temp;
       int a[N];
       for(i=0;i<n;i++)
              a[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)
       for(i=0;i<n-1;i++)
       {
              for(j=0;j<n-1-i;j++,ct++)
              {
                     if(a[j+1]<a[j])//前后比较
                            temp=a[j],
                            a[j]=a[j+1],
                            a[j+1]=temp,
                            mt+=3;//关键字交换计为3次移动
              }    
       }
       printf("冒泡排序");
       output(n,a,ct,mt);
}

void selection_sort(int n,int A[])//选择排序
{
       int mt=0;//移动次数movetime
       int ct=0;//比较次数cmdtime
       int i,j,temp,k;
       int a[N];
       for(i=0;i<n;i++)
              a[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)
       for(i=0;i<n-1;i++)
       {
              k=i;
              for(j=i+1;j<n;j++,ct++)
                     if(a[k]>a[j])
                            k=j;
                     temp=a[i],
                     a[i]=a[k],
                     a[k]=temp,
                     mt+=3;//关键字交换计为3次移动                 
       }
       printf("选择排序");
       output(n,a,ct,mt);
}

void quick(int a[],int low,int up)//快速排序递归算法
{
       int i,j,temp;
       if(low<up)
       {
              i=low;
              j=up;
              temp=a[low],
              qmt++;
              while(i!=j)
              {
                     qct++;
                     while(i<j&&a[j]>temp)
                            j--,
                            qct++;
                     if(i<j)
                            a[i++]=a[j],
                            qct++;
                            qmt++;
                     while(i<j&&a[i]<=temp)
                            i++,
                            qct++;
                     if(i<j)
                            a[j--]=a[i],
                            qct++,
                            qmt++;
              }
              a[i]=temp,
              qmt++;
              quick(a,low,j-1);
              quick(a,i+1,up);
       }
}

void quick_sort(int n,int A[])//快速排序(通过调用快速排序递归算法完成)
{
       int i;
       int a[N];
       for(i=0;i<n;i++)
              a[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)
       quick(a,0,n-1);//调用快速排序递归算法
       printf("快速排序");
       output(n,a,qct,qmt);
}

void insertion_sort(int n,int A[])//插入排序
{
       int mt=0;//移动次数movetime
       int ct=0;//比较次数cmdtime
       int i,j,temp;
       int a[N];
       for(i=0;i<n;i++)
              a[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)
       for(i=1;i<n;i++)
       {
              temp=a[i],
              mt++;
              for(j=i-1;j>=0&&temp<a[j];j--,ct++)
                     a[j+1]=a[j],
                     mt++;
              a[j+1]=temp,
              mt++;
       }
       printf("插入排序");
       output(n,a,ct,mt);
}

void shell_sort(int n,int A[])//希尔排序
{
       int mt=0;//移动次数movetime
       int ct=0;//比较次数cmdtime
       int i,j,k,h,y;
       int a[N];
       for(i=0;i<n;i++)
              a[i]=A[i];//使数组a[]与数组A[]完全相同,对数组a[]进行操作(不改动A[],可以使A[]被其他函数调用)
       for(i=0;i<t;i++)
       {
              h=d[i];
              for(j=h;j<n;j++)
              {
                     y=a[j],
                     mt++;
                     for(k=j-h,ct++,mt++;k>=0&&y<a[k];k-=h)
                            a[k+h]=a[k];
                     a[k+h]=y;
              }
       }
       printf("希尔排序");
       output(n,a,ct,mt);
}

void main()
{
       int n;
       int i;
       int A[N];
       printf("\t*******************************************************\n");
    printf("\t******************内部排序时间复杂度比较***************\n");
    printf("\t*******************************************************\n");
    printf("请输入数组大小(小于100):");
       scanf("%d",&n);//输入所需排序数组大小
       for(i=0;i<n;i++)
       {
              printf("请输入数组a[%d]:",i);
              scanf("%d",&A[i]);//依次输入数组A[0]~A[n]
       }
       bubble_sort(n,A);//冒泡排序
       insertion_sort(n,A);//插入排序
       selection_sort(n,A);//选择排序
       quick_sort(n,A);//快速排序
       shell_sort(n,A);//希尔排序
} 710

上一页  [1] [2] [3] 

内部排序演示C++ 第3页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。