冒泡排序正序逆序例子

C语言正序和逆序冒泡


都是将不规则数组从小到大排列;
正序排列即从左到右遍历;
逆序排列即从右到左遍历。

正序冒泡

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;
}

两个结果一样如图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zhaocx111222333/article/details/109449584