-
冒泡排序重复地走访过要排序的元素列,依次比较两个相邻的元素
-
如果第一个比第二个大,就交换他们两个
-
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对
举一个简单的例子,这是原始数组
4 | 2 | 1 | 3 |
---|
第一趟比较 (比较3次)
- 4和2比较,4>2,交换位置
- 4和1比较,4>1,交换位置
- 4和3比较,4>3,交换位置
2 | 1 | 3 | 4 |
---|
第二趟比较 (比较2次)
- 2和1比较,2>1,交换位置
- 2和3比较,2<3,不做操作
1 | 2 | 3 | 4 |
---|
第三趟比较 (比较1次)
- 1和2比较,1<2,不做操作
1 | 2 | 3 | 4 |
---|
void BubbleSortMinToMax(int *arr,int n) {
int temp;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
上面是从小到大的冒泡排序,我们可以对其做一点修改,使其变为从大到小的排序
void BubbleSortMinToMax(int *arr,int n) {
int temp;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] < arr[j + 1]) { //这里作了修改, ">" 变为了 "<"
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
完整代码
#include <iostream>
using namespace std;
void BubbleSortMinToMax(int *arr,int n) {
int temp;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void BubbleSortMaxToMin(int *arr,int n) {
int temp;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] < arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main()
{
int n;
cout << "Input n: ";
cin >> n;
int* arr = new int[n];
for (int i = 0; i < n; i++)
cin >> arr[i];
BubbleSortMinToMax(arr, n);
for (int i = 0; i < n; i++)
cout << arr[i]<<" ";
cout << endl;
BubbleSortMaxToMin(arr, n);
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
cout << endl;
delete[] arr;
return 0;
}
都看到这里了,客官点个赞再走吧~ pwp ~°