快速排序,一百万随机数,一秒完成

/* 一百万的随机数排序,费时1秒 ! */
/* c */
#include "stdio.h"
#include "time.h"

int shu[1000000];
int i,j,k,len;

void  quick_sort(int left,int right);
void  swap(int left,int right);
void read_file();

void main()
{
	clock_t start, finish;
	double duration;
	read_file();
	printf ("%d\n",len);
	start = clock();
    	quick_sort(0,len-1);
	finish = clock();
    	duration = (double)(finish - start) / CLOCKS_PER_SEC;
	printf ("%.6f\n",duration);
	for (i=0;i<len-1;i++)
		if (shu[i]>shu[i+1])
			printf("%d %d\n",shu[i],shu[i+1]);

}

void read_file()
{
	FILE * fp;
	char c;
	fp = fopen("e:/test/sort/100w.txt","r");
	len=0;
	k=0;
	c = fgetc(fp);
	while (c!=EOF)
	{
		if (c == 32)
		{	
			shu[len]=k;
			k=0;
			len++;
		}
		else
			k = k*10+c-48;
		c = fgetc(fp);
	}
	fclose(fp);
}

void quick_sort(int left,int right)
{
	int m;
	if (left>=right)
		return;
	m = left;
	for (i=left+1;i<=right;i++)
		if (shu[i]<shu[left])
			swap(++m,i);
	swap(left,m);
	quick_sort(left,m-1);
	quick_sort(m+1,right);
}

void swap(int left,int right)
{
	int temp;
	temp = shu[left];
	shu[left] = shu[right];
	shu[right] = temp;
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值