8、从键盘上输入n个数,请用选择排序法对这n个数排序并将排序前和排序后的数字都输出。

如题所述

#include <stdio.h>

void select_sort(int *a,int n) {

int i,j,k;

int t;

for(i = 0;i < n - 1;i++) {

k = i;

for(j = i + 1;j < n;j++) {

if(a[j] < a[k]) k = j;

}

if(k != i) {

t = a[i];

a[i] = a[k];

a[k] = t;

}

}

}

int main() {

int a[100],i,n;

printf("数据个数 : ");

scanf("%d",&n);

for(i = 0;i < n;i++) {

printf("[%d/%d] = ",i + 1,n);

scanf("%d",&a[i]);

}

printf("排序前\n");

for(i = 0;i < n;i++) printf("%d ",a[i]);

printf("\n");

select_sort(a,n);

printf("排序后\n");

for(i = 0;i < n;i++) printf("%d ",a[i]);

printf("\n\n");

return 0;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-22
#include<stdio.h>

void choose(int *,int);
void main()
{
int a[100]={0}; //本来想做成一个n个元素的动态数组,最近发现动态数组越来越没用,直接弄了个大的数组
int n;
scanf("%d",&n);
printf("输入%d个数:\n",n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
printf("输入的%d个数为:",n);
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n选择排序后:\n");
choose(a,n);
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
}
void choose(int *pa,int n)
{
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
{
if (pa[i]>pa[j])
{
int temp=pa[i];
pa[i]=pa[j];
pa[j]=temp;
}
}
}
第2个回答  2011-10-22
void selectSort(int *p_nVec, const int p_nLen) //p_nVec是数组, p_nLen数组中元素个数
{
if (p_nVec == NULL || p_nLen <= 0 )
{
printf("Bad param.\n");
return;
}

int i, j;
int *nMin ;
int nTemp = 0;
for (i = 0; i < p_nLen; ++i)
{
nMin = (p_nVec +i);
for (j = i; j < p_nLen; ++j)
{
if (*nMin > *(p_nVec +j))
{
nTemp = *(p_nVec +j);
*(p_nVec +j) = *nMin;
*nMin = nTemp;
}
}
}
}
第3个回答  2011-10-28
//1.采用“冒泡法”对随机产生的10 个整数按由小到大的顺序排序
#if 0
#include<stdio.h>
#include<stdlib.h>
#define n 10
main()
{
int a[n],i,j,t;
for(i=0;i<10;i++) //随机产生
{
a[i]=rand()%100;
printf("%-5d",a[i]);
}
printf("\n");

for(i=0;i<n-1;i++) //冒泡法
for(j=0;j<n-1;j++)
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}

for(i=0;i<n;i++)
printf("%-5d",a[i]);
printf("\n");
}
#endif

//2.采用“选择法”对随机产生的10个整数按由大到小的顺序排序
#if 0
#include<stdio.h>
#include<stdlib.h>
#define n 10
main()
{
int i,j,t,max,max_i,b[10];
for(i=0;i<n;i++)
{
b[i]=rand()%100;
printf("%-5d",b[i]);
}
printf("\n");

for(i=0;i<n-1;i++) //选择法
{
max =b[i];
max_i=i;
for(j=i;j<n;j++)
if(b[j]>max)
{
max=b[j];
max_i=j;

}
t=b[max_i];
b[max_i]=b[i];
b[i]=t;
}

for(i=0;i<n;i++)
printf("%-5d",b[i]);
printf("\n");

}
#endif

这有两种方式 ,你可以对照一下,这是经典的C语言题目。
相似回答