//这个程序实在是太神奇了,其目的是将字符串中的数字重新排序
//但是只是在数字中进行修改
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 100
/*mysort(char*input,char *output)
{
char*point1,*point2,*insert;
char tmp, min;
while(*input!='\0')
{
if(*input>='0'&&*input<='9')
{
point1=input;
point2=point1;
min=*input;
while(*point2!='\0')
{
if(*point2>='0'&&*point2<='9'&&*point2<=min)
{
min=*point2;
insert=point2;
}
point2++;
}
tmp=*input;
*input=min;
*output=min;
*insert=tmp;
}
else
*output=*input;
output++;
input++;
}
*output='\0';
}*/
int t_median(int a,int b,int c)
{
if (a>=b&&a<=c||a>=c&&a<=b)
return a;
if(b>=a&&b<=c||b>=c&&b<=a)
return b;
if(c>=a&&c<=b||c<=a&&c>=b)
return c;
}
int *c_sort_pro(int *first,int *last)
{
int value=t_median(*first,*(first+(last-first)/2),*(last-1));
int tmp;
while(1)
{
while(*first<value) first++;
last--;
while(value<*last) last--;
if(!(first<last))
return first;
tmp=*first;
*first=*last;
*last=tmp;
first++;
}
}
c_sort(int *first,int *last)
{
if(first<last)
{
int *cut;
while(last-first>0)
{
cut=c_sort_pro(first,last);
c_sort(first,cut);
c_sort(cut,last);
}
}
}
mysort(char *input,char *output)
{
int num1[MAX];
int index[MAX];
int indx;
int i=0,j=0,k;
while(*input!='\0')
{
if(*input>='0'&&*input<='9')
{
num1[j]=*input;
index[j++]=i;
}
i++;
*output++=*input++;
}
c_sort(num1,num1+j);
for (k=0;k<j;k++)
{
indx=index[k];
output[indx]=num1[k];
}
}
int main()
{
double duration;
int i;
clock_t start,finish;
char test1[]="you3are7but4go9";
char test2[30];
start=clock();
for(i=0;i<1000000;i++)
mysort(test1,test2);
printf("%s\n",test2);
finish=clock();
duration= (double)(finish-start) / CLOCKS_PER_SEC;
printf("The time cost is %f seconds!\n",duration);
}
我仿照STL快速排序写了一个快排,但是是错误的,我也没有找到原因,留在以后说吧
关于快速排序的错误问题
最新推荐文章于 2022-05-01 15:33:14 发布