c语言课程设计排序,C语言课程设计shell排序

#include

#include

#include

#include

void shellSort(int *a,int len)

{

int step;

int i,j;

int temp;

for(step=len/2; step>0;step/=2)

{

for(i=step;i=0 && temp a[k-1])

{

lg = l;

}

else

{

lg = k;

}

if (r a[lg-1])

{

lg = r;

}

if (lg != k)

{

swap(&a[lg-1],&a[k-1]);

heapify(a,n,lg);

}

}

void build_heap(int a[],int n)

{

for (int i=n/2 1; i>0; i--)

{

heapify(a,n,i);

}

}

void heap_sort(int a[],int n)

{

build_heap(a,n);

for (int i=n; i>0; i--)

{

swap(&a[0],&a[i-1]);

heapify(a,i-1,1);

}

}

int partitions(int a[],long p,long q)

{

long i,j=p-1;

for (i=p; i{

if (a[i-1] <= a[q-1])

{

j ;

swap(&a[i-1],&a[j-1]);

}

}

j ;

swap(&a[j-1],&a[q-1]);

return j;

}

void quicksort(int a[],long p,long q)

{

long i;

if (p{

i = partitions(a,p,q);

quicksort(a,p,i-1);

quicksort(a,i 1,q);

}

}

void merge(int *a,int start, int mid, int end)

{

int n1 = mid - start 1;

int n2 = end - mid;

int *left = (int *)malloc(sizeof(int)*n1), *right=(int *)malloc(sizeof(int)*n2);

int i, j, k;

for (i = 0; i < n1; i ) /* left holds a[start。

。mid] */

left[i] = a[start i];

for (j = 0; j < n2; j ) /* right holds a[mid 1。。end] */

right[j] = a[mid 1 j];

i = j = 0;

k = start;

while (i < n1 && j < n2)

if (left[i] < right[j])

a[k ] = left[i ];

else

a[k ] = right[j ];

while (i < n1) /* left[] is not exhausted */

a[k ] = left[i ];

while (j < n2) /* right[] is not exhausted */

a[k ] = right[j ];

free(left);

free(right);

}

void MergeSort(int *a,int start, int end)

{

int mid;

if (start < end)

{

mid = (start end) / 2;

MergeSort(a,start, mid);

MergeSort(a,mid 1, end);

merge(a,start, mid, end);

}

}

double gettime(LARGE_INTEGER t,LARGE_INTEGER t1,LARGE_INTEGER t2)

{

double time;

if (t。

LowPart==0 && t。HighPart==0)

time = -1;

else

{

time = (float)(t2。LowPart - t1。

LowPart);

if (time < 0) time = 2^32;

time /= (t。LowPart t。HighPart * 2^32);

}

return time;

}

int main()

{

const int NUM = 1000;

srand(time(NULL));

int data[NUM];

int i;

for (i=0; i{

data[i] = rand()/(RAND_MAX/20000 1);

}

LARGE_INTEGER t,t1,t2;

QueryPerformanceFrequency(&t);

QueryPerformanceFrequency(&t1);

shellSort(data,NUM);

QueryPerformanceFrequency(&t2);

printf("shell time:%0。

4f

",gettime(t,t1,t2));

QueryPerformanceFrequency(&t1);

heap_sort(data,NUM);

QueryPerformanceFrequency(&t2);

printf("shell time:%0。

4f

",gettime(t,t1,t2));

QueryPerformanceFrequency(&t1);

quicksort(data,1,NUM);

QueryPerformanceFrequency(&t2);

printf("shell time:%0。

4f

",gettime(t,t1,t2));

QueryPerformanceFrequency(&t1);

MergeSort(data,0,NUM);

QueryPerformanceFrequency(&t2);

printf("shell time:%0。

4f

",gettime(t,t1,t2));

return 0;

}。

全部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值