/*从小到大排序a[l]到a[r]*/
A.简单,但时间复杂度大
for(int i=l;i<=r;i++){
for(int j=l;j<r;j++){ /*前后排序r-l次,就算min再最后一位(a[r])也能被拉到最前面*/
if(a[j]>a[j+1])
swap(a,j,j+1);
}
}
B.复杂,但时间复杂度小,这是学好算法必须走的一步,好好学吧
例如:arr[10]={2,5,1,4,9,0,7,8,3,6}
for(int i=0;i<9;i++){ //每循环一次,max到最后,所以后一次循环只需排arr[10-i]最大即可
for(int j=0;j<10-1-i;j++){
if(arr[j]>arr[j+1])
swap(arr,j,j+1);
}
}
似乎A,B时间复杂度相同,都是o(n*n)
for(int i=l,z=0;i<r-l;i++,z++){ //n个数,安放完n-1自然就结束了
for(int j=l;j<r-l-z;j++){ //仿照B的模式,代码处理似乎更繁琐了
if(arr[j]>arr[j+1])
swap(arr,j,j+1);
}
}
似乎A更好,是我的错觉吗