#include <stdioh>
#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;
}
C语言代码和运行结果如下:
可见成功按从大到小排序,望采纳~
附源码:
#include <stdioh>
void sort(int a[], int n) {
int i, j, t;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - 1 - i; j++)
if (a[j] < a[j + 1]) { // 将小数交换到后面
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
void display(int a[], int n) {
int i;
for (i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n");
}
int main() {
int a[] = {1,3,2,8,0,6};
int n = sizeof(a) / sizeof(a[0]);
printf("从大到小冒泡排序:\n");
sort(a, n);
display(a, n);
return 0;
}
冒泡排序法,是C语言常用的排序算法之一,意思是对一组数字进行从大到小或者从小到大排序的一种算法。
具体方法是:
相邻数值两两交换。从第一个数值开始,如果相邻两个数的排列顺序与我们的期望不同,则将两个数的位置进行交换(对调);如果其与我们的期望一致,则不用交换。重复这样的过程,一直到最后没有数值需要交换,则排序完成。
C语言常见的排序算法:
1、冒泡排序
基本思想:比较相邻的两个数,如果前者比后者大,则进行交换。每一轮排序结束,选出一个未排序中最大的数放到数组后面。
2、快速排序
基本思想:选取一个基准元素,通常为数组最后一个元素(或者第一个元素)。从前向后遍历数组,当遇到小于基准元素的元素时,把它和左边第一个大于基准元素的元素进行交换。在利用分治策略从已经分好的两组中分别进行以上步骤,直到排序完成。
3、直接插入排序
基本思想:和交换排序不同的是它不用进行交换 *** 作,而是用一个临时变量存储当前值。当前面的元素比后面大时,先把后面的元素存入临时变量,前面元素的值放到后面元素位置,再到最后把其值插入到合适的数组位置。
4、直接选择排序
基本思想:依次选出数组最小的数放到数组的前面。首先从数组的第二个元素开始往后遍历,找出最小的数放到第一个位置。再从剩下数组中找出最小的数放到第二个位置。以此类推,直到数组有序。
以上内容参考 百度百科-排序算法、百度百科-c语言冒泡排序
#include<stdioh>
void main()
{
int a[10];
int i,j,t;
printf("input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(j=0;j<9;j++) /进行9次循环 实现9趟比较/
for(i=0;i<9-j;i++) /在每一趟中进行9-j次比较/
if(a[i]>a[i+1]) /相邻两个数比较,想降序只要改成a[i]<a[i+1]/
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf("the sorted numbers:\n");
for(i=0;i<10;i++)
printf(" %d",a[i]);
}
扩展资料:
冒泡排序算法的运作
1、比较相邻的元素。如果第一个比第二个大(小),就交换他们两个。
2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大(小)的数。
3、针对所有的元素重复以上的步骤,除了最后已经选出的元素(有序)。
4、持续每次对越来越少的元素(无序元素)重复上面的步骤,直到没有任何一对数字需要比较,则序列最终有序。
简单的表示
#include <stdioh>
void swap(int i, int j)
{
int temp = i;
i = j;
j = temp;
}
int main()
{
int a[10] = {2,1,4,5,6,9,7,8,7,7};
int i,j;
for (i = 0; i < 10; i++)
{
for (j = 9; j > i; j--)//从后往前冒泡
{
if (a[j] < a[j-1])
{
swap(&a[j], &a[j-1]);
}
}
}
for (i = 0; i < 10; i++)
{
printf("%d\n", a[i]);
}
return 0;
}
参考资料来源:冒泡排序-百度百科#include<stdioh>
void main(){
int i,j,score[10],count=0,temp,sum=0;
double avg;
for(i=0;i<10;i++){ //输入10个学生的成绩,并求着10个学生的成绩总和
printf("请输入第%d个学生的成绩:",(i+1));
scanf("%d",&score[i]);
sum+=score[i];
}
avg=sum10/10; //求着这10个学生成绩的平均值
for(i=0;i<10;i++){ //统计小于平均分的学生人数
if(score[i]<avg){
count++;
}
}
for(i=0;i<10;i++){ //使用冒泡排序对这10个学生的成绩逆序排序
for(j=0;j<9-i;j++){
if(score[j]<score[j+1]){
temp=score[j];
score[j]=score[j+1];
score[j+1]=temp;
}
}
}
printf("最高成绩:%d分,平均成绩:%2f分,低于平均成绩的人数是:%d人!\n",score[0],avg,count);
}
以上就是关于c语言编程题:分别用冒泡法和选择法对输入的10个整数由大到小排序全部的内容,包括:c语言编程题:分别用冒泡法和选择法对输入的10个整数由大到小排序、c语言冒泡排序从大到小姐姐1.3.2.8.0.6、C语言冒泡排序法是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)