一、问题描述
对于一个给定的含有n个元素的数组,利用冒泡排序按元素值递增排序。
二、算法
简单选择排序是将原数组分为有序区和无序区两个部分,有序区中的所有元素都不大与无序区中的元素,初始时有序区为空。经过n-1次排序,每次在无序区通过相邻元素两两比较,若相邻元素反序则两两调换,若正序则继续比较下一组相邻元素,最终将无序区中最小的元素移动到无序区开头(有序区末尾)。
三、代码
#include<stdio.h>
//交换x、y的值
void fun1(double &x,double &y)
{
double t;
t=x;
x=y;
y=t;
}
//输出函数
void fun2(double a[],int n)
{
int i;
for(i=0;i<n;i++)
printf("%lf ",a[i]);
printf("\n");
}
//冒泡排序
void fun3(double a[],int n,int i)
{
int j;
bool exchange;
if(i==n-1)return;
else
{
exchange=false;
for(j=n-1;j>i;j--)
if(a[j]<a[j-1])
{
fun1(a[j],a[j-1]);
exchange=true;
}
if(exchange==false)return;
else fun3(a,n,i+1);
}
}
int main()
{
int n=10;
double a[]={1,9,6,7.5,4,7.2,8,6.8,8,23};
fun2(a,n);
fun3(a,n,0);
fun2(a,n);
}