用选择法将一组数字升序排序,谁懂C语言,谢谢
发布网友
发布时间:2022-05-02 18:38
我来回答
共4个回答
热心网友
时间:2022-06-21 06:33
选择排序的原理为:
一次选定数组中的每一个数,记下当前位置并假设它是从当前位置开始后面数中的最小数min=i,从这个数的下一个数开始扫描
直到最后一个数,并记录下最小数的位置min,扫描结束后如果min不等于i,说明假设错误,则交换min与i位置上的数。
代码如下:
void selectionSort(double *p, int n)
{
double temp;
int min, i, j;
for (i=0; i < n; i++)
{
min=i; //假设最小值的下标为i
for (j=i+1; j < n; j++) //查找i之后是否有更小的数,若有将其下标赋值给min
if (*(p+j) < *(p+min))
min = j;
if (min != i) //min不等于i说明i之后有更小的数,交换这两个数
{
temp = *(p+i);
*(p+i) = *(p+min);
*(p+min) = temp;
}
}
}
参考程序如下:
#include <stdio.h>
#include <malloc.h>
double *selectionSort(double *p, int n)
{
double temp;
int min, i, j;
for (i=0; i < n; i++)
{
min=i; //假设最小值的下标为i
for (j=i+1; j < n; j++) //查找i之后是否有更小的数,若有将其下标赋值给min
if (*(p+j) < *(p+min))
min = j;
if (min != i) //min不等于i说明i之后有更小的数,交换这两个数
{
temp = *(p+i);
*(p+i) = *(p+min);
*(p+min) = temp;
}
}
return p;
}
void main()
{
int n;
double *p;
printf ("输入数据个数:\n");
scanf("%d",&n);
p = (double *)malloc(n*sizeof(double));
printf("输入数据:\n");
for(int i=0;i<n;i++)
scanf("%lf",&p[i]);
p = selectionSort(p,n);
printf("输出升序结果:\n");
for(i=0;i<n;i++)
printf ("%lf\t",p[i]);
printf("\n");
}
热心网友
时间:2022-06-21 06:33
#include "stdio.h"
main()
{
int a[11]; //输入数组元素个数由你自己定
int i,j,k,n;
printf("please input numbers:\n");
for (i=1;i<11;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++)
for(j=i+1;j<=10;j++)
{
(a[i]>a[j])?(a[0]=a[i],a[i]=a[j],a[j]=a[0]):(a[0]=0);
}
for(i=1;i<11;i++)
printf("%d ",a[i]);
printf("\n");
}
热心网友
时间:2022-06-21 06:34
你好,这是我自己总结的升序源代码:
/**********************************
* 在main函数中声明排序函数
* 编写两种不同思考方式的排序函数
* 实现从小到大的数值排序
***********************************/
#include <stdio.h>
int main ()
{
void sort(int a[] , int n);
int i;
int a[10];
printf("Please input 10 numbers :\n");
for(i=0; i<10; i++)
{
scanf("%d",&a[i]);
}
sort(a,10);//函数调用
return 0;
}
void sort(int a[] , int n)//另外一种形式的冒泡法
{
int i,j,t,min;
for(i=0; i<n-1; i++)
{
min=i;
for (j=i+1; j<n; j++)
{
if (a[min] > a[j])//把数组中的最小值的下标赋给min
{
min=j;
}
t = a[i];
a[i] = a[min];//把最小值赋给a数组的第一个数
a[min] = t;
}
}
printf("\nThe sorted numbers are :\n");
for(i=0; i<n; i++)
printf("%4d",a[i]);
printf("\n");
}
/*这种就是正宗的冒泡排序
void sort(int a[] , int n)//冒泡法排序,
{
int i,j,t;
for(i=0; i<n-1; i++)
{
for(j=0; j<n-1-i; j++)//实现的是:最大的数沉底
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
printf("\nThe sorted numbers are :\n");
for(i=0; i<n; i++)
printf("%4d",a[i]);
printf("\n");
}
*/
热心网友
时间:2022-06-21 06:34
你的问题是输入的数字排序,还是随便输入已知的数字的个数,让他们排序?