在学校上课时遇到的c语言问题求答案

将冒泡排序过程单独写成一个函数,再在主函数中通过调用该函数实现对任意输入的多个数据(数据个数不超过100个)进行排序,并输出排序结果。

望采纳

#include<bits/stdc++.h>
using namespace std;
void fun(int*p,int n)
{
     int i,j,t;
     for(i=n-1;i>=1;i--){
        for(j=0;j<i;j++){
            if(*(p+j)>*(p+i))
            swap(*(p+i),*(p+j));
        }
    }
}
int main()
{
    int n,a[100],i;
      cout<<"请输入需要排序的数的数量:"<<endl;
    scanf("%d",&n);
    cout<<"请输入需要排序的数:"<<endl;
    for(i=0;i<n;i++)
    cin>>a[i];
    fun(a,n);
    cout<<"排序后:"<<endl;
    for(i=0;i<n;i++)
    cout<<a[i]<<" ";
    return 0;
}

#include int max(int a,int b);//声明该函数

供参考:

#include<stdio.h>
void Bubble_sort(int* a, int length)
{
    int i, j, tmp;
    for (i = 0; i < length - 1; i++) {
        for (j = 0; j < length - i - 1; j++) {
            if (a[j] > a[j + 1]) {
                tmp = a[j]; a[j] = a[j + 1]; a[j + 1] = tmp;
            }
        }
    }
}
int main()
{
    int n, i, a[100];
    scanf("%d", &n);   //输入数据个数
    for (i = 0; i < n; i++) //输入数组数据
        scanf("%d", &a[i]);
    Bubble_sort(a, n);
    for (i = 0; i < n; i++) //输出已排序的数组
        printf("%d ", a[i]);
    printf("\n");
    return 0;
}

望采纳


void fun(int* p, int n) {
  for(int i = n - 1; i >= 1; i--) {
    for(int j = 0; j < i; j++) {
      if(*(p + j) > *(p + i)) {
        swap(*(p + i), *(p + j));
      }
    }
  }
  return;
}

起泡法排序的基本思路:每次将相邻的两个数比较,将较大的调至最前面。若有五个数如5,8,3,1,7第一次先将最前面的两个数5和8比较,因为5比8小,故此次比较两者位置不需要调换,得5,8,3,1,7接下来将8和3比较,8比3大,故将俩者位置调换得5,3,8,1,7。同上方法继续比较和调换位置,第一轮最终得到5,3,1,7,8。显然第一轮结束时,我们将这一组数中最大的数沉淀到了队列最末尾(即按照从小到大,排好了1个数)。按照同样的思路我们再接着对前面的4个数使用同样的方法。可以看出每轮我们都可以排好一个数,也就是每轮少排一个数。最终我们会将所有数都排好得到一个从小到大的排序。