c++ 冒泡排序(减少循环次数)
#include<iostream> using namespace std; //打印数据 void printAll(int a[], int n) { for(int i = 0; i < n; i++) { cout << " " << a[i]; } cout << endl; } //冒泡排序 void maoPaoPaiXu(int arr[],int n) { for(int i = 0; i < n-1; i++) { //打印数据 cout << "(" << i+1 << ")"; printAll(arr,n); //排序标记 bool biaoji = false; for(int m = 0; m < n-1-i; m++) { if(arr[m] > arr[m+1]) { //交换数据 int tmp = arr[m]; arr[m] = arr[m+1]; arr[m+1] = tmp; biaoji = true; } } //判断是否移动数据标记(没有移动表明排序完成,直接跳出不在循环,减少循环次数) if(!biaoji) { break; } } } int main() { int arr[] = {1,2,400,5,6,8,9,234,434,304}; int n = sizeof(arr) / sizeof(arr[0]); maoPaoPaiXu(arr,n); printAll(arr,n); return 0; }
(使用 移动数据标记)运行结果:
(1) 1 2 400 5 6 8 9 234 434 304
(2) 1 2 5 6 8 9 234 400 304 434
(3) 1 2 5 6 8 9 234 304 400 434
1 2 5 6 8 9 234 304 400 434
(没有使用移动数据标记)运行结果:
(1) 1 2 400 5 6 8 9 234 434 304
(2) 1 2 5 6 8 9 234 400 304 434
(3) 1 2 5 6 8 9 234 304 400 434
(4) 1 2 5 6 8 9 234 304 400 434
(5) 1 2 5 6 8 9 234 304 400 434
(6) 1 2 5 6 8 9 234 304 400 434
(7) 1 2 5 6 8 9 234 304 400 434
(8) 1 2 5 6 8 9 234 304 400 434
(9) 1 2 5 6 8 9 234 304 400 434
1 2 5 6 8 9 234 304 400 434
以上结果对比明显有 移动数据标记 的运行次数减少,明显可以减少运行时间。
我已经与基督同钉十字架。现在活着的,不再是我,乃是基督在我里面活着。
并且我如今在肉身活着,是因信神的儿子而活,他是爱我,为我舍己。
我不废掉神的恩。义若是借着律法得的,基督就是徒然死了。