冒泡排序法:
-
输入n个数。
-
在未排序的n个数中,相邻元素依次比较,数大后移,排序后最大数移到最末尾(第n项)。
-
在未排序的n-1个数中,相邻元素依次比较,数大后移,排序后最大数移第n-1项。
-
以此类推,直到未排序的数减为0,排序结束。
例如:排序前的n个数为54321
第一次排序:43215(详细过程:45321、43521、43251、43215)
第二次排序:32145
第三次排序:21345
第四次排序:12345
代码:
#include<stdio.h>
void swap(int* x, int* y)//交换函数
{
int temp = *x;
*x = *y;
*y = temp;
}
void lyn(int* a, int n)//数大后移
{
for (int j = 0; j < n - 1; j++)
for (int i = 0; i < n - 1; i++)
if (a[i] > a[i + 1])
swap(&a[i], &a[i + 1]);
}
int main()
{
int n, i;
int a[10] = { };
printf("输入正整数n(n<=10):");
scanf("%d", &n);
printf("输入%d个互不相同的整数;", n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
lyn(a, n);
for (i = 0; i < n; i++)
printf("%d", a[i]);
return 0;
}
方法优化:
程序从前往后依次比较相邻元素大小的同时,也从后往前依次比较相邻元素大小
#include<stdio.h>
void swap(int* x, int* y)//交换函数
{
int temp = *x;
*x = *y;
*y = temp;
}
void lyn(int* a, int n)//从前往后依次比较相邻元素大小
{
for (int j = 0; j < n/2; j++)
for (int i = 0; i < n - 1; i++)
if (a[i] > a[i + 1])
swap(&a[i], &a[i + 1]);
}
void bjt(int* a, int n)//从后往前依次比较相邻元素大小
{
for (int j = 0; j < n/2; j++)
for (int i = n - 2; i >= 0; i--)
if (a[i] > a[i + 1])
swap(&a[i], &a[i + 1]);
}
int main()
{
int n, i;
int a[10] = { };
printf("输入正整数n(n<=10):");
scanf("%d", &n);
printf("输入%d个互不相同的整数;", n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
lyn(a, n);
bjt(a, n);
for (i = 0; i < n; i++)
printf("%d", a[i]);
return 0;
}
运行结果:
版权声明:本文为lbcbjtlhmjq原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。