码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构C语言几种排序

时间:2015-07-05 23:49:12      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#define SIZE 30000
typedef int Elemtype;
typedef struct
{
    Elemtype key;
}SQ;
void Shellsort(Elemtype a[],int n,int d[],int number)
{
    int i,j,k,m,span;
    SQ temp;
    for(m=0;m<number;m++)           /*总共要进行number轮排序*/
    {
        span=d[m];               
        for(k=0;k<span;k++)         /*每一轮排序中,全部元素被分为span 个小组*/  
        {
            for(i=k; i+span<n;i+=span)
            {
                temp.key=a[i+span];
                j=i;
                while(j>-1&&temp.key<a[j])
                {
                    a[j+span]=a[j];
                    j-=span;
                }
                a[j+span]=temp.key;
            }
        }
    }
}
void Insertsort(Elemtype a[],int n)
{
    int i,j;
    SQ temp;
    for(i=0;i<n-1;i++)
    {
        temp.key=a[i+1];
        j=i;
        while(j>-1&&temp.key<a[j])
        {
            a[j+1]=a[j];
            j--;
        }
        a[j+1]=temp.key;
    }
}
void Quicksort(Elemtype a[],int low,int high)    /*low,high分别标记待排序元素的起始位置和终止位置*/
{
    int i,j;
    SQ temp;
    i=low,j=high;
    temp.key=a[low];   /*以第一个元素为标准元素*/
    while(i<j)
    {
        while(i<j&&temp.key<=a[j])         /*数组右端扫描*/
            j--;
            if(i<j)
            {
                a[i]=a[j];
                i++;
            }
        
       while(i<j&&a[i]<temp.key)
           i++;
          if(i<j)
          {
              a[j]=a[i];
              j--;
          }
       
       
    }
    a[i]=temp.key;
    if(low<i)  Quicksort(a,low,i-1);         /*对左端集合进行递归*/
    if(i<high) Quicksort(a,j+1,high);        /*对右端集合进行递归*/   
}
void product(Elemtype a[])
{   int i;
       for(i=0;i<30000;i++)
    {    a[i]=rand();
        printf("%10d",a[i]);
        if((i+1)%6==0) printf("\n");
    }
}
int main()
{   Elemtype a[SIZE],b[5]={2500,500,100,20,1};
    clock_t   start,end;              /*typedef long clock_t;*/
    start=clock();/* srand()设置随机种子,time()函数的返回值是作为srand函数的参数的!*/
    product(a);
    Quicksort(a,0,SIZE-1);
    end=clock();
    printf("\n%lf\n",(double)(end-start)/CLOCKS_PER_SEC);  /*常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元*/
    start=clock();
    product(a);
    Insertsort(a,10000);
    end=clock();   printf("\n%lf\n",(double)(end-start)/CLOCKS_PER_SEC);
    start=clock();
    product(a);
    Shellsort(a,10000,b,5);
    end=clock();   printf("\n%lf\n",(double)(end-start)/CLOCKS_PER_SEC);
    return 0;    
}

数据结构C语言几种排序

标签:

原文地址:http://www.cnblogs.com/it-xiaojun/p/4623255.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!