c语言编程题:分别用冒泡法和选择法对输入的10个整数由大到小排序
#include <stdio.h>
void maopao(int *a){
int temp=0;
for(int i=0;i<10-1;++i)//只需要冒泡9个数最后一个就已经有序了
for(int j=0;j<10-i-1;++j)//j的取值需<10-i-1;为何-1,
if(a[j]<a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
void xuanze(int *a){
for(int i=0;i<9;i++)
{
int temp=i,b;
for(int j=i+1;j<10;j++)
{
if(a[temp]<a[j])
temp=j;
}
if(i!=temp)
{
b=a[temp];
a[temp]=a[i];
a[i]=b;}
}
}
int main()
{
int a[10]={7,8,5,4,3,2,6,9,0,1};
int b[10]={1,2,5,7,43,23,565,6,9,10};
maopao(a);
for(int n=0;n<10;++n)
printf("%d ",a[n]);
printf("\n");
xuanze(b);
for(int n=0;n<10;++n)
printf("%d ",b[n]);
}
扩展资料:
需要说明的是:
2、每个源文件可由一个或多个函数组成。
3、一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。是整个程序的入口。
4、源程序中可以有预处理命令(包括include 命令,ifdef、ifndef命令、define命令),预处理命令通常应放在源文件或源程序的最前面。
5、每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。结构体、联合体、枚举型的声明的“}”后要加“ ;”。
6、标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。
7、自定义函数在使用之前需要进行函数声明。
参考资料:
#include <stdio.h>
#define N 10
//冒泡排序(升序)
void bubble_sort(int a[],int n)
{
int i,j; //j表示趟数,i表示第j趟两两比较的次数
int tmp; //临时变量
for(j=0;j<n-1;j++)
for(i=0;i<n-1-j;i++)
{
if(a[i] > a[i+1])
{
tmp=a[i];
a[i]=a[i+1];
a[i+1]=tmp;
}
}
}
//选择排序算法,按从小到大顺序
void select_sort(int *array,int n)
{
int i,j,k;
int tmp;
for(i=0;i<n-1;i++)
{
k=i; //开始一趟选择排序,假定第i个元素是后面n-i+1个未排序的元素中最小的元素
for(j=i+1;j<n;j++)
{
if(array[k] > array[j]) //如果发现比当前最小元素还小的元素,则更新记录最小元素的下标k
k=j;
}
//如果最小元素的下标不是后面n-i+1的未排序序列的第一个元素,则需要交换第i个元素和后面找到的最小元素的位置
if(k != i)
{
tmp=array[k];
array[k]=array[i];
array[i]=tmp;
}
}
}
//输入数组元素函数
void inputData(int *a,int n)
{
int i;
printf("输入数组元素:\n");
for(i=0;i<n;i++)
scanf("%d",&a[i]);
}
//输出数组元素函数
void outputData(int *a,int n)
{
int i;
printf("输出数组元素:\n");
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n\n");
}
int main()
{
int arr[N]={0};
inputData(arr,N);
printf("使用冒泡排序算法...\n");
bubble_sort(arr,N); //调用冒泡排序函数
outputData(arr,N);
inputData(arr,N);
printf("使用选择排序算法...\n");
select_sort(arr,N); //调用选择排序函数
outputData(arr,N);
return 0;
}
#include <iostream>
using namespace std;
#define N 10
void MpSort(int *a,int n)
{
int i,j;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
a[j]=a[j]+a[j+1];
a[j+1]=a[j]-a[j+1];
a[j]=a[j]-a[j+1];
}
}
}
}
int main()
{
int i,j;
int *a=new int[N];
for(i=0;i<N;i++)
{
cin>>a[i];
}
MpSort(a,N);
for(i=0;i<N;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
//冒泡排序
//时间复杂度是 O(pow(n,2))
#include <iostream>
using namespace std;
#define N 10
void XzSort(int *a,int n)
{
int i,j,min_i,t;
for(i=0;i<n-1;i++)
{
min_i=i;
for(j=i+1;j<n;j++)
{
if(a[min_i]>a[j])
{
min_i=j;
}
}
if(min_i!=i)
{
t=a[i];
a[i]=a[min_i];
a[min_i]=t;
}
}
}
int main()
{
int *a;
a=new int[N];
for(int i=0;i<N;i++)
{
cin>>a[i];
}
XzSort(a,N);
for(int i=0;i<N;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
//直接选择排序
//时间复杂度为 O(pow(n,2))
这种问题最基础网上一大推没必要问,我的是C++写的不过算法都是一样的