#include<stdio.h> //输入输出函数头文件
//Array数组名称,n数组长度
void Bubble(int Array[],int n); //冒泡排序
void Choice(int Array[],int n); //选择排序
int main() //x是起始位置,方便递归。
{
int i;
int a[10];
int t;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("请选择要使用的算法:1 冒泡 2 选择 ");
putchar('\n');
scanf("%d",&t);
switch(t)
{
case 1: Bubble(a,10); break; //冒泡排序
case 2: Choice(a,10); break; //选择排序
default: printf("输入错误\n"); break;
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
putchar('\n');
return 0;
}
void Bubble(int Array[],int n) //冒泡排序
{ //冒泡的思想是前一个元素和后一个元素进行比较,当前一个大于或小于时就交换。
int i,k,m;
m=n-1; //最后一次交换元素位置,这个主要是在最后如果出现
while(m!=0) //连继不需要排序的元素时就可以过滤掉不需要排序的元素
{
k=m; //k元素后的元素是已排序了的元素。
m=0; //如果这里m不至0,将会导致算法不稳定,可能出死循环
for(i=0;i<k;i++)
{
if(Array[i]>Array[i+1])
{ //每一躺比较将最大值排到最后
int j=Array[i];
Array[i]=Array[i+1];
Array[i+1]=j;
m=i;
}
}
}
}
void Choice(int Array[],int n) //选择排序
{ //选择排序的思想是每躺比较找出最大或最小值
int i,j,m,u; //然后将结果和待排元素的第一个位置的元素进行交换
for(i=0;i<n-1;i++)
{
m=i; //m记录待排元素每一个元素的位置
for(j=i+1;j<n;j++)
if(Array[m]<Array[j])
m=j; //如果找到最大或最小值就将元素位置保存到m
if(m!=i) //如果m元素发生变化,就说明出现新在最值或最小值
{ //然后将结果和待排元素的第一个元素进行交换
u=Array[i];
Array[i]=Array[m];
Array[m]=u;
}
}
}
请采纳
温馨提示:内容为网友见解,仅供参考