c语言 使用冒泡排序将一维数组A中的N个元素升序排列
冒泡排序的程序代码如下:
#include
int main()
{
int a[10]={0};
int i=0,j=0,t=0;
for(i=0;i<10;i++)
{scanf("%d",&a[i]);}
for(i=0;i<10;i++)
{for(j=0;j<10-i;j++){
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}}}
for(i=0;i<10;i++)
{printf("%d ",a[i]);}
return 0;}
任意输入十个数据,程序运行结果:
扩展资料:
冒泡排序算法的原理如下:
1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
如果需要看到每一趟冒泡的情况,需要把循环放在外面,我用你代码写了一个,你可以看看。还是不明白的话,建议你看看《数据结构》这本书,里面很详细!
欢迎采纳……
#include
#define N 10
void show(int r[] , int n)
{ /*elements are stored in r[1] to r[n]*/
int i=0;
for(;i<n;n++)
printf("%d ",&r[1]);
}
void bubblesort(int r[],int n;int k)
{ /*elements are stored in r[1] to r[n]*/
int a;
for(int j=n-1;j>k;j--) //初次k=0
{
if(r[k]<r[k-1]){a=r[k],r[k]=r[k-1];r[k-1]=a;}
}
{
}
}
/*bubblesort*/
void main()
{
int a[N],i;
printf("请输入 %d 个整数:
",N);
for(i=0;i<N+1;i++) scanf("%d",&a[i]);
printf("数组A的%d个元素是:
",N);
for(int j=1;j<n;j++){
show(a,N);
printf("冒泡法排序每趟的情形是:
");
bubblesort(a,N,j-1);
}
printf("
after sorted by bubblesort:
");
show(a,N);
}
方法和详细的操作步骤如下:
1、第一步,打开C文件,定义一组序列和要排序的各种变量,然后处理排序逻辑,具体的代码见下图,转到下面的步骤。
2、第二步,完成上述步骤后,冒泡排序的逻辑是一组数字从第一个值开始,如果两个相邻数字的顺序与期望的顺序不同,则会交换两个数字的位置。 重复此过程,直到最后一个数字。如果需要交换,则排序完成,实现的代码见下图,转到下面的步骤。
3、第三步,完成上述步骤后,编译并运行程序,就获得了想要的结果了,见下图。这样,就解决了这个问题了。
#include <stdio.h>
#include <malloc.h>
int main()
{
int *p=NULL,n=0;
int i,j,temp;
printf("请输入数组大小!\n");
scanf("%d",&n);
p=(int *)malloc(sizeof(int)*n);
if(p==NULL)
{
printf("内存不足分配失败!\n");
return 0;
}
printf("请为%d个元素赋值如 1 2 3\n",n);
for(i=0;i<n;++i)
scanf("%d",p+i);
for(i=1;i<n;++i)
{
for(j=0;j<n-i;++j)
if(p[j]>p[j+1])
{
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
printf("排序结果!\n");
for(i=0;i<n;++i)
printf("%5d",p[i]);
printf("\n");
return 0;
}
#include <stdio.h>
int main()
{
int t,i,j,a[100],n;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++) //冒泡排序过程
for(j=1;j<=n-i;j++)
{
if(a[j]<a[j-1])
{
t=a[j];
a[j]=a[j-1];
a[j-1]=t;
}
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
#include "stdio.h"
int main()
{
int a[100],n,i,j,tmp;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)
for(j=0;j<n-1-i;j++)
if(a[j]>a[j+1])
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("
");
}
结果:
我这给出一个不用指针,不用手动分配内存空间的
相对 精简易懂 的方法
#include <stdio.h>
int main()
{
int N,A[N];
int i,j,temp;
printf("请输入数组大小!\n");
scanf("%d",&N);
printf("请为%d个元素赋值\n",N);
for(i=0;i<N;i++)
scanf("%d",&A[i]);
for(i=0;i<N;i++)
for(j=0;j<N-i;j++)
if(A[j]>A[j+1])
{
temp=A[j];
A[j]=A[j+1];
A[j+1]=temp;
}
}
printf("排序结果:\n");
for(i=0;i<N;++i)
printf("%d ",A[i]);
printf("\n");
return 0;
}
书须安达: 如果遇到相等的值不进行交换,那这种排序方式是稳定的排序方式. 原理:比较两个相邻的元素,将值大的元素交换到右边 思路:依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面. (1)第一次比较:首先比较第一和第二...
林口县15949622208: 编程,用冒泡排序法对一维数组a中的元素按值从小到大进行排序.其中:Int a[]={20,3, - 2,60,15} - ?
书须安达: import java.io.*; class BubbleSort {public static void main (String[] args) {Integer a[]={20,3,-2,60,15};Integer temp;for(int i=0;i<a.length;i++){for(int j=0;j<a.length;j++){if(a[i]<a[j]){temp=a[i];a[i]=a[j];a[j]=temp;}}}//OutPutfor(int k=0;k<a....
林口县15949622208: 用C语言编写程序实现:利用冒泡法将数组a中的n个元素按升序排列,现将一个新数x插入到数组a - ?
书须安达: 冒泡法排序: void sort(int *a, int n) {int k, l;for(int i = 0; i < n; i++){k = i;for(int j = i; j < n; j++){if(a[j] > a[k]){k = j;}}l = a[i];a[i] = a[k];a[k] = l;} }void insert(int *a, int n, int num) {int k;for(int i = 0; i < n; i++){if(num > a[i]){k = i;break;}...
林口县15949622208: 用C语言对一维数组排序,并输出原来的位置 - ?
书须安达: 可以先用冒泡排序对数组进行排序,然后对排序的数组进行遍历,找出其在排序之前数组中的位置,参考代码如下:#include<stdio.h>#include<string.h>#define N 5 int main() { int a[N],b[N],c[N],i,j,temp; for(i=0;i<N;i++){//输入数组,并用b保存数...
林口县15949622208: C语言用冒泡法对一维数组中10个数按降序进行排列 - ?
书须安达: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23#include<stdio.h> intmain() {intn[]={1,2,3,4,5,6,7,8,9,10};inti,j,num;for(i=0;i<10;i++){for(j=i+1;j<10;j++){if(n[i]<n[j]){num=n[i];n[i]=n[j];n[j]=num;}}} printf("1,2,3,4,5,6,7,8,9,10...
林口县15949622208: 编程题:用冒泡排序法将一维数组A[10]={1、2、4、3、6、5、7、8、9、10}进行排列. - ?
书须安达: C语言????#include "stdio.h" void bubble_sort(int array[],int n) {//冒泡法排序 int i,j,flag,temp; for(i = 0; i < n-1; i++) { flag = 1; for(j = 0; j < n-i-1; j++) { if(array[j] > array[j+1]) { temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; flag = 0; } } if(1 == ...
林口县15949622208: C语言 分别用两种方法给一维数组a[5]={6,2, - 2,5,7}排序 第一种方法是冒泡法(相邻两 - ?
书须安达: 冒泡排序#include <stdio.h>//输出数组中的数据 void Output(int *a, int len);//冒泡排序 void Scort(int *a, int len); void main() { int a[5] = {6, 2, -2, 5, 7}; //输出排序前的数据 printf("排序前:"); Output(a,5); Scort(a,5);//调用冒泡排序函数 printf...
林口县15949622208: C语言编程:任意输入一组整数,存入一个一维数组中,用冒泡法排序后,存放在原数组中,输出排序后的数组. - ?
书须安达: #include void bubble_sort(int *arr,int n) { int i,j; int tmp; for(i = 0;i{ for(j = 0;j{ if(arr[j] > arr[j+1]) { tmp = arr[j]; arr[j] = arr[j+1]; arr[j + 1] = tmp;}} } } void print_array(int *arr,int n) { int i; for(i = 0;iprintf("%d\t",arr[i]); printf("\n"); }#define N 10 int main(...
林口县15949622208: c语言冒泡法对数组a[10]排序 - ?
书须安达: #include #define N 10 main() { int i,j,t; int a[N]={...
林口县15949622208: c语言冒泡法对数组a[10]排序 - ?
书须安达: #include#define N 10 main() { int i,j,t; int a[N]={7,3,2,5,9,1,6,10,4,8}; for(i=N;i>0;i--) for(j=0;j { if(a[j] { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } for(i=0;i printf("%d ",a[i]); printf("\n"); }