关于利用c语言函数实现冒泡与选择排序
一直以来排序都是c语言入门者的重点学习对象,冒泡与选择无疑是经典中的经典。单独去写排序我想并不如何困难,但是想要利用函数似乎并不是很容易。涉及到函数传递的问题从来就没有简单过,有时候即使编译器并没有报错但是在执行的过程中并没有实现排序的功能。
以下的代码是最经典的排序代码,并没有利用指针,也没有将交换的部分单独开来再写一个函数。目的是为了方便初学者去理解掌握,原理的话没有详细解释是太多的参考书都有讲不必赘述了,希望大家记住的不是代码而是原理。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define N 5
void compare1(int a[]);
void compare2(int a[]);
void main()
{int a[N], i;
printf("请输入N个整型变量\n");
for (i = 0; i < N; i++)
{scanf("%d", &a[i]);}
compare1(a);
printf("N个数按照从小到大排序后的结果为\n");
for (i = 0; i < N; i++)
printf("%d", a[i]);
compare2(a);
printf("N个数按照从小到大排序后的结果为\n");
for (i = 0; i < N; i++)
printf("%d", a[i]);}
void compare1(int a[])
{int i, j, temp;
for (i = 0; i < N - 1; i++)
//外循环控制比较趟数
{ for (j = 0; j < N - 1 - i; j++)
//内循环控制两两比较,使得大数沉底
{ if (a[j] > a[j + 1])
{temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp; }
}
}
void compare2(int a[])
{ int i, j, temp;
for (i = 0; i < N - 1; i++)
//外循环控制比较趟数
{
for (j = i + 1; j <= N - 1; j++)
//内循环控制两两比较,使得小数前移
{if (a[i] > a[j]) { temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}