ios之冒泡排序
未优化之前
NSMutableArray *arr = [NSMutableArray arrayWithObjects:@12,@144,@14,@50,@58,@27,@65, nil];
int x = 0,y = 0;
//循环控制比较次数
for (int i = 0; i<arr.count-1; i++) {
//两两比较
for (int j = 0; j<arr.count-1; j++) {
//交换位置
if (arr[j]>arr[j+1]) {
id temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
x++; //记录内循环的次数
}
y++; //记录外循环的次数
}
NSLog(@"记录内循环的次数%zd",x); //36
NSLog(@"记录外循环的次数%zd",y); //6
NSLog(@"%@",arr);
优化之后
NSMutableArray *arr = [NSMutableArray arrayWithObjects:@12,@144,@14,@50,@58,@27,@65, nil];
int x = 0,y = 0;
//循环控制比较次数
for (int i = 0; i<arr.count-1; i++) {
//为什么issort = true,不能写在循环外面
//因为交换位置isSort = false,isSort的值永远是false,我们要检测的是某一趟是否交换位置
BOOL isSort = true; //假设排序ok
//两两比较
for (int j = 0; j<arr.count-1; j++) {
//交换位置
//如果交换位置,说明没有排序好,如果不交换位置,说明已经排序好
if (arr[j]>arr[j+1]) {
isSort = false; //没有排序好
id temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
x++; //记录内循环的次数
}
y++; //记录外循环的次数
if (isSort) {//如果排序好了
break;
}
}
NSLog(@"记录内循环的次数%zd",x); //36 18
NSLog(@"记录外循环的次数%zd",y); //6 4
NSLog(@"%@",arr);
前端冒泡排序(与上同理)
方式一:
var array = [12,144,14,50,58,27,65];
var x = 0;
var y = 0;
//循环控制比较次数
for(var i = 0;i< array.length-1;i++){
//两两比较
for(var j =0; j < array.length-1; j++){
//交换位置
if (array[j]> array[j+1]){
var tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
}
x++; //记录内循环的次数
}
y++; //记录外循环的次数
}
console.log("记录内循环的次数"+x);
console.log("记录外循环的次数"+y);
console.log(array);
方式二:
var array = [12,144,14,50,58,27,65];
var x = 0;
var y = 0;
//循环控制比较次数
for(var i = 0;i< array.length-1;i++){
//为什么issort = true,不能写在循环外面
//因为交换位置isSort = false,isSort的值永远是false,我们要检测的是某一趟是否交换位置
var isSort = true; //假设排序ok
//两两比较的次数 1--6 2--5 。。。。
for(var j =0; j < array.length-1- i; j++){
//如果交换位置,说明没有排序好,如果不交换位置,说明已经排序好
if (array[j]> array[j+1]){
isSort = false; //没有排序好
var tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
}
x++; //记录内循环的次数
}
y++; //记录外循环的次数
if (isSort){
//如果排序好了
break;
}
}
console.log("记录内循环的次数"+x);
console.log("记录外循环的次数"+y);
console.log(array);