冒泡排序

时间复杂度: 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--  ==> 数组头部先变得有序

posted @ 2020-09-05 21:39  荒Picasso  阅读(97)  评论(0)    收藏  举报