快速排序是另一种基于分治技术的重要排序算法。不像合并排序是按照元素在数组中的位置对它们进行划分,快速排序按照元素的值对它们进行划分。
编译器为vc++6.0
#include<stdio.h>
#include<stdlib.h>
void Quicksort(int num[],int begin,int end);
int Partition(int num[],int begin,int end);
int main()
{
FILE * fpRead;
FILE * fpWrite;
char * pchBuf;
char tmp[5];
int Len;
int i,j=0,k=0,nLen=0;
int num[200];
fpRead=fopen("bs-2.txt","r"); //以只读打开文件
fseek(fpRead,0,SEEK_END); //将文件指针移到结尾
Len=ftell(fpRead); //计算文件长度
rewind(fpRead); //将文件指针移到开头
pchBuf=(char*)malloc(sizeof(char)*Len+1); //在堆里开空间存放文件的内容
if(!pchBuf) //如果没有分配退出
{
printf("内存不够!\n");
exit(0);
}
Len = fread(pchBuf,sizeof(char),Len,fpRead); //将文件内容放入空间中,并自动调整长度
fclose(fpRead); //关闭文件
pchBuf[Len] = '\0'; //将字符长结尾附零
for (i=0;i<=Len;i++)
{
tmp[j++]=*(pchBuf+i); //找到字符串开头
if (*(pchBuf+i)==',' ||*(pchBuf+i)=='\0' ) //判断是否遇到逗号和结尾
{
tmp[j] = '\0'; //将子字符串附零
nLen++;
num[k++]=atoi(tmp); //将字符串转化为整形
j=0; //查找下一个字符串
}
}
Quicksort(num,0,nLen-1); //快速排序
fpWrite=fopen("bs.txt","w"); //打开要写入的文件
for(i=0;i<nLen;i++)
{
fprintf(fpWrite,"%d,",num[i]); //将排好序的数组写入文件
if(i%10==9) //每十个换一行
fprintf(fpWrite,"\n");
}
fclose(fpWrite); //关闭文件
return 0;
}
/****************************************
//快速排序
//输入 一个待排序的数组 数组的开始位置 数组的结束位置
输出 一个排好序的数组
*****************************************/
void Quicksort(int num[],int begin,int end)
{
int s; //s是分裂的位置
if(begin<end) //递归跳出位置
{
s=Partition(num,begin,end);//调用函数分成两个区
Quicksort(num,begin,s-1); //递归调用排序算法
Quicksort(num,s+1,end); //同上
}
}
//分区算法
int Partition(int num[],int begin,int end)
{
int p,j,i;
i=begin; //赋值开始位置
j=end; //赋值结束位置
p=num[begin];
while(i<j)/*循环结束条件*/
{
for(;j>i;j--) //循环查找第一个小的位置后停止
{
if(num[j]<p)
{
num[i++]=num[j]; //交换
break;
}
}
for(;i<j;i++) //循环查找第一个大的位置后停止
{
if(num[i]>p)
{
num[j--]=num[i]; //交换
break;
}
}
}
num[i]=p; //赋值中值
return i; //返回中值的位置
}
输入文件为bx-2.txt
132,133,134,11,12,139,140,62,63,64,65,66,67,
1,2,3,4,5,6,7,48,49,50,138,16,17,20,
101,102,103,104,105,106,146,147,148,107,108,109,110,96,
21,22,23,24,25,25,27,28,29,30,
41,42,8,9,10,46,47,
51,52,53,54,55,56,57,58,59,60,
73,74,75,71,72,18,97,98,19,129,130,
137,136,13,14,144,145,15,128,
77,78,31,32,35,76,149,150,99,100,119,
91,92,93,94,95,116,117,114,118,120,
81,82,83,84,85,122,123,
112,111,43,44,45,113,115,36,37,38,39,40,25,126,127,
131,135,61,69,70,
141,142,143,86,68,87,90,
121,88,89,124,179,80,33,34
输出文件为bx.txt
1,2,3,4,5,6,7,8,9,10,
11,12,13,14,15,16,17,18,19,20,
21,22,23,24,25,25,25,27,28,29,
30,31,32,33,34,35,36,37,38,39,
40,41,42,43,44,45,46,47,48,49,
50,51,52,53,54,55,56,57,58,59,
60,61,62,63,64,65,66,67,68,69,
70,71,72,73,74,75,76,77,78,80,
81,82,83,84,85,86,87,88,89,90,
91,92,93,94,95,96,97,98,99,100,
101,102,103,104,105,106,107,108,109,110,
111,112,113,114,115,116,117,118,119,120,
121,122,123,124,126,127,128,129,130,131,
132,133,134,135,136,137,138,139,140,141,
142,143,144,145,146,147,148,149,150,179,
实现了快速排序