#include <stdio.h>
int main()
{
int i, j, k, n, tmp, a[1000];
printf("请输入需要排序的数据个数\n");
scanf("%d",&n);// 从键盘输入待排序的数据个数
for (i = 0; i < n; i++)
{ // 利用for循环依次将输入的数据放置在数组中
scanf("%d",&a[i]);
}
for (i = 0; i < n - 1; i++)
{// 外层循环 变量i控制排序总共进行n-1轮
k = i;
for (j = i + 1; j < n; j++)
{ //内层循环 变量j控制每轮进行比较的次数
if (a[j] < a[k])
{
k = j; //k记录每轮比较中的最小者的下标
if (k != i)
{ //将第i轮的最小者,与a[i]交换
tmp = a[i];
a[i] = a[k];
a[k] = tmp;
}
}
}
}
printf("排序后的数据如下:\n");
for (i = 0; i < n; i++) { // 利用for循环进行输出
printf("%d\t", a[i]);
}
return 0;
}
运行结果如下:
自定义函数的方法实现
#include<stdio.h>
void SelectSort(int a[], int n)
{ //选择排序
int mix, tmp;
int i, j;
for (i = 0; i < n - 1; i++)
{ //每次循环数组,找出最小的元素,放在前面,前面的即为排序好的
mix = i; //假设最小元素的下标
for (j = i + 1; j < n; j++) //将上面假设的最小元素与数组比较,交换出最小的元素的下标
if (a[j] < a[mix])
mix = j;
//若数组中真的有比假设的元素还小,则交换
if (i != mix)
{
tmp = a[i];
a[i] = a[mix];
a[mix] = tmp;
}
}
}
int main()
{
int a[10] = { 9,1,5,8,3,7,4,6,2,0 };
int i;
SelectSort(a, 10);
for (i = 0; i < 10; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
运行结果如下:
指针传参方法实现:
#include<stdio.h>
//指针方法实现十个整数的排序
int main()
{
void sort(int x[], int n);//函数的声明
int i, * p, a[10];//定义i,*p,数组a
p = a;//把首元素的地址赋值给指针变量p
printf("please enter 10 integer numbers:");
for (i = 0; i < 10; i++)
{
scanf("%d", p++);//将从数组的每一个元素的地址都存到内存当中去
}
p = a;//再次将指针p指向首元素的地址
sort(p, 10);//函数的调用
for (p, i = 0; i < 10; i++)//输出语句 可以写p=a;或者直接写p
{
printf("%d ", *p);
p++;
}
printf("\n");
return 0;
}
void sort(int x[], int n)
{
int i, j, k, t;
for (i = 0; i < n - 1; i++)//外层循环控制比较的总趟数 n-1趟
{
k = i;//第一次先将下标0对应的元素作为最大元素的下标
for (j=i+1; j < n ; j++)//内层循环控制每趟比较的总次数
{
if (x[j] > x[k])
{
k = j; //k始终保存最大值元素的下标
}
if(k!=i)//如果最大值元素的下标不是最前面的i,则交换元素值
{
t = x[i];
x[i] = x[k];
x[k] = t;
}
}
}
}