冒泡排序
时间复杂度: O(n^2)
(额外)空间复杂度O(1)
稳定性: 稳定
1 for(int i = 1, bool sorted = false; i < n && sorted = !sorted; i++) //1~n,共n-1趟,最后一趟只剩一个未排序,自然有序;(赋值表达式的返回值是 表达式左值的引用) 2 { 3 for(int j = 0; j< n-i; j++)//第i趟需要比较n-i次,因为第i趟执行过程中已有i-1项是有序的了 4 { 5 if(arr[j] > arr[j+1])// > 是升序, < 是降序 6 { 7 swap(arr[j], arr[j+1]); 8 sorted = false; //一趟中只要存在逆序对,就是还没排好;相对应的,一趟中没有逆序对就可以结束排序了 9 } 10 } 11 }
n个数按顺序比较是否存在逆序对只需n-1次
内循环j从0++ ==> 数组尾部先变得有序; j = n; j > i; j-- ==> 数组头部先变得有序

浙公网安备 33010602011771号