#include
void sort(int array[],int n)
{int i,t;
for(i=0;i<n-1;i++)
{
if(array[i+1]<array[i])
t=array[i+1];array[i+1]=array[i];array[i]=t;}
}
int main()
{
int a[10],i;
printf("enter the array\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort(a,10);
printf("the sorted array:\n");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
sort中需要两层for循环。
你这样只是把最大的数字扔在最后而已。
你只是写了冒泡排序最基本一步,你的程序排序结束后,只是把最大的一个排在了最后,按照这个思路,在外面再写一个for循环,将次大的排在倒数第二地方,第三大排在倒数第三个地方,依照这个方法,两个for循环可以解决,你少写了一个for循环!
同意上面的分析,加一层循环就可以了
刚才又看了一眼你的标题,如果你要写的是选择排序的话,这么像之前分析的那样改不行的。选择排序和冒泡排序还是有区别的,一个是从前向后排,一个是从后向前排,而且时间复杂度和空间复杂度也是不同的。
选择法要2重循环,用一次循环只是把最大的那个数排到最后
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(array[i]<array[j])
t=array[i]; array[i]=array[j]; array[j]=t;
}
}
void bubble_sort(int a[], int n)
{
int i, j, temp;
for (j = 0; j < n - 1; j++)
for (i = 0; i < n - 1 - j; i++)
{
if(a[i] > a[i + 1])
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
直接贴一个冒泡排序的函数给你好了。
void sort(int array[],int n)
{
int i,t,j;
for(i=1;i<n;i++) //边界不对,这里应该是n
{
for (j=i; 0<j;--j) //两个for循环,第二个循环是跟前面排列好的比较大小
{
if(array[j]<array[j-1])
{
t=array[j];
array[j]=array[j-1];
array[j-1]=t;
}
}
}
}