选择排序
实例说明:
用选择排序法对一组数据由小到大进行排序,数据分别为526、36、2、369、56、45、78、92、125、52。
实现过程:
1. 在VC++6.0中创建一个C文件
2. 引用头文件,代码如下:
#include <stdio.h>
3. 程序中用到了两个for循环语句。第一个for 循环是确定位置的,该位置是存放每次从待排序数列中经选择和交换后所选出的最小数。第二个for循环是实现将确定位置上的数与后面待排序区间中的数进行比较的。
4. 程序主要代码如下:
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a[10] = {},i,j; /*定义变量及数组为基本整型*/
printf("请输入10个数:");
int n = sizeof(a) / sizeof(int);
for (i = 0; i < n; i++)
{
scanf("%d", &a[i]); /*从键盘中输入要排序的10个数字*/
}
for (i = 0; i < n - 1; i++)
{
for (j = 1 + i; j < n; j++)
{
if (a[i] > a[j]) /*如果前一个数比后一个数大,则利用中间变量t实现两值互换*/
{
int t = a[j];
a[j] = a[i];
a[i] = t;
}
}
}
for (i = 0; i < n; i++)
{
printf("%d ", a[i]); /*输出排序后的数组*/
}
putchar('\n');
return 0;
}
运行结果:
第二种方法:
主要程序代码如下:
#include <stdio.h>
int main(int argc, char const *argv[])
{
int a[10] = {},i,j; /*定义变量及数组为基本整型*/
printf("请输入10个数:");
for (i = 0; i < 10; i++)
{
scanf("%d", &a[i]); /*从键盘中输入要排序的10个数字*/
}
int n = sizeof(a) / sizeof(int); //计算数组元素的个数
for (i = 0; i < n - 1; i++) //循环的次数为 n-1次
{
int k = i; //把i的值给k 保存下标
for (j = i + 1; j < n; j++) //遍历除数组中第一个数之外的数
{
if (a[k] > a[j]) //如果数组中的第一个数大于后面的数
{
k = j; //将后面的数的下标赋值给k
}
}
if (k != i) //当k的值不等于i的值时,两个数进行交换,如果等于,则说明下标为i的元素是这个数组中最小的元素,则不需要交换。
{
int t = a[k]; //当前a[k]中存储的是数组中最小的数
a[k] = a[i];
a[i] = t;
}
}
for (i = 0; i < n; i++) //遍历数组中所有的数
{
printf("%d ", a[i]);
}
putchar('\n');
return 0;
}
运行结果:
技术要点:
选择排序的基本算法是从待排序的区间中经过选择和交换后选出最小的数值存放到a[0]中,再从剩余的未排序区间中经过选择和交换后选出最小的数值存放到a[1]中,a[1]中的数字仅大于 a[0],依此类推,即可实现排序。
希望能在学习和工作中帮助到您!