C++ 冒泡排序

C++ 冒泡排序,第1张

#include
using namespace std;

//交换
void swap(int &a, int &b) {
	int temp = a;
	a = b;
	b = temp;
}

//冒泡排序
/*从后往前(或从前往后)两两⽐较相邻元素的值,
若为逆序(即A[i-1]>A[i]),则交换它们,直到序列⽐较完。


称这样过程为“⼀趟”冒泡排序。


总共需进⾏ n-1 趟冒泡。


*/ void BubblSort(int a[], int n) { //n个元素,n-1趟排序 for (int i = 0; i < n - 1; i++) { //标识本趟冒泡排序是否发生交换的标志 //若某⼀趟排序没有发⽣“交换”, 说明此时已经整体有序。


bool flag = false; //一趟冒泡过程,从后往前冒泡,i所指位置之前的元素都已经"有序",不用再对比 //第1趟排序使关键字值最小的一个元素"冒"到最前面 //第2趟结束后,最⼩的两个 元素会“冒”到最前边 for (int j = n - 1; j > i; j--) { if (a[j - 1] > a[j]) { swap(a[j - 1], a[j]); flag = true; } } if (flag == false) { //本趟遍历没有发生交换,说明表已经有序,退出方法 return; } } } void printArr(int a[], int len) { for (int i = 0; i < len; i++) { printf("%d ", a[i]); } printf("\n"); } int main() { int arr[6] = {23, 54, 12, 4, 5, 6}; int len = sizeof(arr) / sizeof(int); printArr(arr, len); BubblSort(arr, len); printArr(arr, len); }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/578384.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存