C语言练习(14)
前言
- 给定一个一维数组,对这个数组从小到大进行排序,本次用冒泡法进行排序,并给出全部解题程序和结果
问题
- 给定一个一维数组,对这个数组从小到大进行排序
问题分析
- 例如[2,4,5,8,9,1,0,6,3,7]两个数之间比较一次,一共需要比较9次(下面前四次不需要交换,后五次需要交换),每一轮比较下来该轮最大的数一定会排序下来,如下面(一)、(二)、(三)所示
- 求一维数组元素个数
length = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数
- 整体程序
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int arr[] = {2,4,5,8,9,1,0,6,3,7};
int length = 0;
int t = 0;
length = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数
for (int i = 0; i < length - 1 ; i++)//计算比较的次数,10个数只需比较9次
{
for (int j = 0; j < length - 1 - i; j++)//当第一轮比较完成后,最大的一个数已经排序好
{
if (arr[j] > arr[j + 1])
{
t = arr[j];//来储存这个需要交换的数
arr[j] = arr[j + 1];
arr[j + 1] = t;
}
}
}
for (int i = 0; i < length; i++)
{
printf("%d ",arr[i]);
}
return 0;
}
结果
总结
- 比较难理解的就是 for (int j = 0; j < length - 1 - i; j++),上面也说过第一轮比较下来后9一定会排序在最后一个,当二轮比较下来后8一定会排序在最后一个,以此类推j < length - 1 - i