#include <stdio.h>
#include <string.h>
#include <myhead.h>
#define MAX 10
int main(int argc, const char *argv[])
{
int *p=malloc(sizeof(int)*MAX);
int i,j,min,t;
printf("请输入10个元素:");
for(i=0;i<MAX;i++)
{
scanf("%d",p+i);
}
printf("\n");
for(i=0;i<MAX;i++)
{
printf("%d\t",*(p+i));
}
//简单排序
for(i=0;i<MAX-1;i++)
{
min=i;
for(j=i+1;j<MAX;j++)
{
if(p[j]<p[min])
{
min=j;
}
}
if(i!=min)
{
t=p[i];
p[i]=p[min];
p[min]=t;
}
}
printf("排序后的结果:\n");
for(i=0;i<MAX;i++)
{
printf("%d\t",*(p+i));
}
return 0;
}
结果:
请输入10个元素:3 2 1 6 5 4 9 7 8 0
3 2 1 6 5 4 9 7 8 0
排序后的结果:
0 1 2 3 4 5 6 7 8 9
函数封装:简单选择排序
#include <myhead.h>
#define MAX 10
int input_s(int *p)
{
int i;
printf("请输入10个元素:\n");
for(i = 0;i<MAX;i++)//循环输入MAX个数据
{
scanf("%d",p+i);//==&p[i]
}
return 0;
}
int ouput_s(int *p)
{
int i;
for(i = 0;i<MAX;i++)
{
printf("%d\t",*(p+i));//==p[i] 循环输出
}
return 0;
}
int sort_s(int *p)
{
int i,j,min,t;
for(i = 0;i<MAX-1;i++)//MAX-1趟排序
{
min = i;
for(j = i+1;j<MAX;j++)
{
if(p[j]<p[min])//寻找较小值下标
{
min = j;
}
}
if(i!=min)//交换i和min下标对应的值
{
t = p[i];
p[i] = p[min];
p[min] = t;
}
}
}
int main(int argc, const char *argv[])
{
int *p = malloc(sizeof(int)*MAX);//申请10个连续的内存空间
input_s(p);//输入数据函数
ouput_s(p);//输出函数
//简单选择排序
sort_s(p);//简单选择排序
printf("\n排序后的结果:\n");
ouput_s(p);//输出函数
p=NULL;//指针置空
return 0;
}