思路:给定一个数组,int arr[] = {4,2,8,0,5,7,1,3,9 }; 每次都从第一个元素开始,比较相邻的元素,如果相邻的第一个元素比第二个大,就交换他们两个(可以做一个交换函数);对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。
犯错:刚开始错误的以为有9个元素,那么最外面for循环就要循环9轮,其实总排序轮数为(9 - 1)。第0轮要对比9个元素,相邻对比只需对比8次;同理,第1轮只需对比7次,以此类推。
程序如下:
#include <iostream>
using namespace std;
//封装一个函数,利用冒泡排序,实现对整型数组的升序排序
//如何把一个数组传到一个函数中 1.int *arr 2.int arr[]
//显示函数
void myShow(int arr[], int len)
{
for (int i = 0; i < len; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
//封装一个冒泡排序函数 参数1 数组的首地址,参数2 数组的长度
void mySort(int *arr,int len)
{
//外部循环,排序总轮数 = 元素个数 - 1
for (int i = 0; i < len - 1; i++)
{
//内层循环,对比次数 = 元素个数 - i - 1
for (int j = 0; j < len - i - 1; j++)
{
//第一个元素 > 第二个元素,交换,把大的数往后挪
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
cout << "第" << i << "轮交换后:";//从第0轮开始排序
myShow(arr, len);
}
cout << endl;
}
int main()
{
int arr[] = { 4,2,8,0,5,7,1,3,9 };//无序数组
//算术表达式求数组长度 ---- int类型数组所占总长度 / 每个元素长度
int len = sizeof(arr) / sizeof(arr[0]);
cout << "排序前:";
myShow(arr, len);
cout << endl;
mySort(arr, len);
cout << "排序后:" ;
myShow(arr, len);
system("pause");
return 0;
}