//冒泡排序
for (int i =0; i<length-1; i++) {
for (int j =i+1; j<length; j++) {
if (arr[i] < arr[j]) {
int flag = arr[i];
arr[i]= arr[j];
arr[j]=flag;
}
}
}
//自己想到的
for (int i =0; i<length-1; i+=2) {
if (arr[i] < arr[i+1]) {
int flag = arr[i];
arr[i]= arr[i+1];
arr[i+1]=flag;
}
for (int j =i+2; j<length; j++) {
if (arr[i+1] < arr[j]) {
int flag = arr[i+1];
arr[i+1]= arr[j];
arr[j]=flag;
if (arr[i] < arr[i+1]) {
int flag = arr[i];
arr[i]= arr[i+1];
arr[i+1]=flag;
}
}
}
}
冒泡计算次数:(n-1)+(n-2)+...+1= n*(n-1)/2;
自己:
最少计算:
(1+n-2)+(1+n-4)+...+(1+0) = n/2+(n-2+n-4+...+0)
= n/2+(n-2+0)*(n/2)/2
= n/2+(n-2)*n/4
= n*n/4
最大计算个数:
(1+(n-2)*2)+(1+(n-4)*2)+...+(1+2*2)+(1+0)
=n/2+2(n-2+n-4+..+0)
=n/2 + (n-2)*n/2
= (n-1)n/2
比冒泡少计算次数:0----->(n*n-2*n)/2
不知道谁看到类似的算法