递归简单排序
最大的那个排不进。。{:10_292:}#include <stdio.h>
void swap(int *x,int *y)
{
int tmp=*x;
*x=*y;
*y=tmp;
}
void disp(int a[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%4d",a);
}
}
void SelectSort(int a[],int n,int i)
{
int j,k;
if(i==n-1)
{
return;
}
else
{
k=i;
for(j=i+1;j<n;j++)
{
if(a>a)
{
k=j;
}
if(k!=i)
{
swap(&a,&a);
SelectSort(a,n,i+1);
}
}
}
}
int main(void) {
int n=10;
int a[]={2,4,1,5,7,8,3,9,10,6};
printf("排序前:");
disp(a,n);
putchar('\n');
SelectSort(a,n,0);
printf("排序后:");
disp(a,n);
return 0;
} 一个小错误
#include <stdio.h>
void swap(int *x,int *y)
{
int tmp=*x;
*x=*y;
*y=tmp;
}
void disp(int a[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%4d",a);
}
}
void SelectSort(int a[],int n,int i)
{
int j,k;
if(i==n-1)
{
return;
}
else
{
// k=i;
for(j=i+1;j<n;j++)
{
k = i; // 要定义在循环里
if(a>a)
{
k=j;
}
if(k!=i)
{
swap(&a,&a);
SelectSort(a,n,i+1);
}
}
}
}
int main(void) {
int n=10;
int a[]={2,4,1,5,7,8,3,9,10,6};
printf("排序前:");
disp(a,n);
putchar('\n');
SelectSort(a,n,0);
printf("排序后:");
disp(a,n);
return 0;
} 巴巴鲁 发表于 2020-10-1 19:03
一个小错误
还是不对。。
{:10_272:} greenery 发表于 2020-10-1 20:14
还是不对。。
哪里? 巴巴鲁 发表于 2020-10-1 19:03
一个小错误
我甚觉得原来那个k=i的位置应该是对的 greenery 发表于 2020-10-1 20:25
我甚觉得原来那个k=i的位置应该是对的
你写的不是冒泡排序吗?
冒泡排序的思路是什么? 巴巴鲁 发表于 2020-10-1 21:26
你写的不是冒泡排序吗?
冒泡排序的思路是什么?
我的是最普通的简单排序,遍历 剩下的一串,找到剩下的这一串中最小的放到剩下这一串的最前面,i++,然后再反复。。。。。。 greenery 发表于 2020-10-1 22:05
我的是最普通的简单排序,遍历 剩下的一串,找到剩下的这一串中最小的放到剩下这一串的最前面,i++,然后 ...
对啊,这就是冒泡排序,从第一个到最后一个元素把最小或最大放后面
每次k=i,这个元素不能变
页:
[1]