冒泡排序优化算法思想:我们通过在程序定义了一个bool类型的flag变量,用来判断往后的循环当中,数组是否已经是有序的,每一轮循环都会设置其值为true,当有元素对调位置时,就将flag的值设置为true,表示该数组还不是有序数组。每一轮都要判断flag的值,如果判断当前一轮操作没有元素有位置调换,那么可以提前结束所有的循环。
void bubble_sort(int* a,int sz) { int i, j; if (a == NULL) return; int temp = 0; int flag = true; //用来标记是否存在数据位置的转换 for (i = 1; i < sz&&flag; ++i) //控制循环比较的次数 { flag = false; for (j = sz - 1; j >= i; --j) { if (a[j] < a[j - 1]) { temp = a[j]; a[j] = a[j - 1]; a[j - 1] = temp; flag = true; } } } } int main() { int arr[] = { 4, 6, 5, 8, 9, 3, 2, 1, 7 }; int size = sizeof(arr) / sizeof(int); bubble_sort(arr, size); for (int i = 0; i < size; i++) { cout << arr[i] << " "; } cout << endl; return 0; }