C语言简单冒泡法程序

C语言简单冒泡法程序,第1张

1、打开Visual stdio软件,在空项目里新建一个c语言程序空文件:

2、d出的窗口选择C++文件,将文件扩展名改为“.c”点击添加完成新建c文件,之后就可以编写程序了:

3、这里从数组头部开始,不断比较相邻的两个元素的大小,让较大的元素逐渐往后移动(交换两个元素的值),直到数组的末尾,经过一轮的比较,就可以找到最大的元素,并将它移动到最后一个位置,然后依次类推直到数组的最后一个数比较完,最后输出结果;

4、最后需要执行程序,按下crtl+F5d出程序的执行结果,就可以看到排序后的结果了:

在linux下GCC编译成功,如果你是VC的编译环境,应该也可以。

#include <stdio.h>

/* 输出排序前和排序后的函数 */

void PrintfSort(int *a, int n)

{

int i, j, temp

printf("\n未排序的数组:\n\t")

for (i = 0i <ni++) /* 输出排序前的情况 */

printf("%d ", *(a+i))

printf("\n由小到大排序:\n\t")

/* 算法核心部分 */

for (j = n - 1j >0j--)/* 写成这样比较好 */

for (i = 0i <ji++)

if (*(a+i) >*(a+i+1))

{

temp = *(a+i)

*(a+i) = *(a+i+1)

*(a+i+1) = temp

}

for (i = 0i <ni++) /* 输出排序后的情况 */

printf("%d ", *(a+i))

printf("\n--END--\n\n")

printf("输入10个100以内的正数:\n") /* 循环输入 */

}

/* 获取输入字符的函数,带验证功能 */

void GetNumber(int *a, int n)

{/* 变量和函数声明 */

int i, j, power

int c/* 记录获取字符 */

int buff[3] = {0}/* 获取数字暂存在这里,如[24],储存为[2][4] */

void PrintfSort(int *, int) /* 要用到的输出函数 */

i = 0 /* 记录输入数字的个数,最大是10,因为要求输入10个数字 */

while (i <n) /* 循环输入n = 10次,就是10个数字 */

{

printf("\t输入第%2d个正数,然后按回车键: ", i+1)

while ((c = getchar()) == ' ' || c == '\n') /* 跳过开头输入的空格和回车,不写入数组 */

j = 0 /* 记录数字的位数,最多3位,因为最大的数是100,只有3位 */

/* 简单记录每次 输入的数字的位数+1,如19是两位,那么power值是100是三位 */

/* 由于输入的数字最大位数是三位 ,所以power值不会大于int型的最大值*/

power = 1

/* 判断输入的数字最大是三位数,缓存数组buff会记录每一位 */

/* 每位上的数是0至9的数,只要判断0至9就可以了 */

/* 允许输入空格,如“2 4”,实际是“24” */

while ((j <3 &&c - '0' >= 0 &&c - '0' <= 9) || c == ' ')

{

if (c == ' ') /* 当输入“2 4”,会跳过中间的空格,实际是“24” */

{

c = getchar()

continue

}

/* 记录这个数字到缓存数组 */

buff[j++] = c - '0'

power *= 10

c = getchar()

}

/* 每输入一个数字都要按回车确定结束 */

if (c == '\n')

{

j = 0

*(a+i) = 0

/* 如[2][4]最后将数字合并为[24],写入到数组a中

实际是和的累加,其中过程为4 * 1 加 2 * 10等于24 */

while (power >1)

{

power /= 10

buff[j] *= power

*(a+i) += buff[j]

j++

}

/* 第i个数大于100,会被要求重新输入第i个数 */

if(*(a+i) >100)

{

printf("不是0到100的数字!重新输入:\n")

continue

}

} else {/* 非数字的输入会被要求重新输入 */

printf("不是0到100的数字! 重新输入:\n")

/* 由于终端在回车后才显示内容 ,

while()可以避免连续多个错误输入在回车后出现多个printf() */

while (c != '\n')

c = getchar()

continue

}

i++ /* 如果顺利进行到这里,就记录一次成功输入 */

}

/* 上面 成功循环输入10次,就调用输出函数输出结果*/

PrintfSort(a, n)

}

/* 冒泡排序主函数 */

int main()

{ /* 声明变量和函数 */

int a[10]/* 记录10个数字 */

int n = 10

void GetNumber(int *, int)

printf("输入10个100以内的正数:\n")

while (1) /* 死循环输入,关闭就是关闭终端,比较简陋 */

GetNumber(a, n) /* 判断和记录都在这里进行 */

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11997797.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存