都是将不规则数组从小到大排列;
正序排列即从左到右遍历;
逆序排列即从右到左遍历。
正序冒泡
void bubbleSort1(int arr[],int size) {
//顺序
for (int a = 0; a < size-1; a++){
//最多size-1轮比较
for (int b = 0; b < size - 1 - a; b++){
if (arr[b ]>arr[b+1]){
int c = arr[b ];
arr[b] = arr[b+1];
arr[b+1] = c;
}
}
}
}
元素是从右到左依次来确定的。每一次循环选出当前最大的放在右边。
逆序冒泡
void bubbleSort2(int arr[], int size) {
//逆序
for (int a = 0; a < size-1; a++) {
for (int b = size - 1; b > a; b--) {
if (arr[b - 1] > arr[b]) {
int tmp = arr[b - 1];
arr[b - 1] = arr[b];
arr[b] = tmp;
}
}
}
}
元素是从左到右依次来确定的。每一次循环选出当前最小的放在左边。
源代码
主要是区分两种遍历的区别,他们的变化过程也不相同
#include <stdio.h>
#include <stdlib.h>
#pragma warning (disable:4996)
void bubbleSort1(int arr[],int size) {
//顺序
for (int a = 0; a < size-1; a++){
//最多size-1轮比较
for (int b = 0; b < size - 1 - a; b++){
if (arr[b ]>arr[b+1]){
int c = arr[b ];
arr[b] = arr[b+1];
arr[b+1] = c;
}
}
}
}
void bubbleSort2(int arr[], int size) {
//逆序
for (int a = 0; a < size-1; a++) {
//最多size-1轮比较
for (int b = size - 1; b > a; b--) {
if (arr[b - 1] > arr[b]) {
int tmp = arr[b - 1];
arr[b - 1] = arr[b];
arr[b] = tmp;
}
}
}
}
int main(){
int arr[] = {
2, 5, 8, 3 ,7, 9};
bubbleSort2(arr,sizeof(arr)/sizeof (arr[0]));
//直接改变函数名即可。
for (int a = 0; a < sizeof(arr) / sizeof (arr[0]); a++){
printf(" %d", arr[a]);
//2 5 8 3 7 9--2 3 5 7 8 9;
}
system("pause");
return 0;
}
两个结果一样如图: