程序代码:
#include<stdio.h>
#include<math.h>
#define N 100000
int small[N];
int big[N];
void init_array(int a[],int n)
{
int i;
for(i=0;i<n;i++)
a[i]=random();
}
void print(int a[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%d\n",a[i]);
}
void bubble_sort(int a[],int n)//冒泡排序
{
register int i=0,j=0,temp;
for(i=0;i<n;i++)
for(j=0;j<n-i-1;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
void insert_sort(int a[],register int n)//插入排序
{
register int i,j,temp;
/*for(i=1;i<n;i++)
{
temp = a[i];
for(j=i;j>0;j--)
{
if(a[j-1]>temp)
a[j]=a[j-1];
a[j-1]=temp;
}
}*/
for(i=1;i<n;i++)
{
for(j=i-1,temp = a[i];j>=0&&temp<a[j];j--)
{
a[j+1]=a[j];
}
a[j+1]=temp;
}
}
void quick_sort(int a[],int start,int end)
{
if(start >= end) return;
int i,j,k;
int temp,mid;
i=0;
j=0;
k=0;
temp=a[start];
for(i=start+1;i<=end;i++)
{
if(a[i]<temp)
small[j++]=a[i];
else
big[k++]=a[i];
}//将数分成两个数组
mid=start+j;
a[mid]=temp;
for(i=start,k=0;k<j;i++,k++)
{
a[i]=small[k];
}
for(i=mid+1,k=0;i<=end;i++,k++)
{
a[i]=big[k];
} //放回原来数组
//for(i=0;i<j;i++)
// printf("small[%d]=%d\n",i,small[i]);
//for(i=0;i<k;i++)
// printf("big[%d]=%d\n",i,big[i]);
//for(i=0;i<end;i++)
// printf("a2[%d]=%d\n",i,a[i]);
quick_sort(a,start,mid-1);
quick_sort(a,mid+1,end);
}
void select_sort(int a[],register int n)//选择排序
{
register int i,j,temp,item;
for(i=n;i>0;i--)
{
temp=a[0];
for(j=0;j<=i;j++)
{
if(temp<a[j])
{
temp=a[j];
item=j;
}
}
a[item]=a[i];
a[i]=temp;
n-=1;
}
}
void main()
{
int a[N];
init_array(a,N);
//bubble_sort(a,N);
//insert_sort(a,N);
//select_sort(a,N);
quick_sort(a,0,N);
print(a,N-1);
}
这是我改正之后的代码,原来有很多思路都不对劲,谢谢楼上的指点,知错就改