标签:temp 返回 冒泡排序 注意 i++ 技术 code 例子 技术分享
概念理解:
在一个长度为3的数组中,在第一趟遍历3个数据,找出其中最小的数值与第一个元素交换;
第二趟遍历2个数据,找出其中最小的元素与第一个数交换(注意:这里的第一个数是指遍历的第一个数,实质上是数组的第二个数)
而第三趟则是和自己比较,位置还是原来的位置
复杂度:
平均时间复杂度:O(n^2)
//选择排序
function selectionSortFn(arr){
console.log(‘原数组:[‘+ arr + ‘]‘)
for (var i = 0; i < arr.length; i++) {
for (var j = i+1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
console.log(arr);
}
return arr;
}
var initArr = [10, 4, 8, 3];
selectionSortFn(initArr);
我们看一下打印的结果:
[选择排序]
原数组:[10,4,8,3]
[3, 10, 8, 4]
[3, 4, 10, 8]
[3, 4, 8, 10]
[3, 4, 8, 10]
结合概念就很好理解了。
复杂度
时间复杂度:O(n^2)
//冒泡排序
function bubbleSortFn(arr){
console.log(‘原数组:[‘+arr + ‘]‘)
for (var i = 0; i < arr.length-1; i++) {
for (var j = 0; j < arr.length-1-i; j++) {
//每次比较都会确定一个最小数,所以j < arr.length-1-i
if (arr[j] > arr[j+1]) {
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
console.log(arr)
}
return arr;
}
var initArr = [10, 4, 8, 3];
bubbleSortFn(initArr);
我们看一下打印的结果:
原数组:[10,4,8,3]
[4, 8, 3, 10]
[4, 3, 8, 10]
[3, 4, 8, 10]
//快速排序
function quickSortFn(arr){
console.log(‘原数组:[‘+arr + ‘]‘)
// 如果数组长度<=1 ,则直接返回
if (arr.length <= 1) return arr;
//
var bisectionIndex = Math.floor(arr.length/2);
// 找基准,把基准从原数组中删除
var bisection = arr.splice(bisection,1)[0];
// console.log(bisection);
// 定义作用数组
var left = [];
var right = [];
// 比基准小的放left ,比基准大的放right
for (var i = 0; i < arr.length; i++) {
if (arr[i] <= bisection) {
left.push(arr[i]);
}else{
right.push(arr[i]);
}
console.log(arr);
}
//递归
return quickSortFn(left).concat([bisection],quickSortFn(right));
}
var initArr = [10, 4, 8, 3];
quickSortFn(initArr);
我们看一下打印结果:
[4, 8, 3]
[4, 8, 3]
[4, 8, 3]
[8, 3]
[8, 3]
概念理解:
检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了。
复杂度
时间复杂度:O(n^2)
//插入排序
function insertSortFn(arr){
console.log(‘原数组:[‘+arr + ‘]‘)
for (var i = 1; i < arr.length; i++) {
var temp = arr[i];
for (var j = i-1; j >=0 && temp < arr[j]; j--) {
arr[j+1] = arr[j];
arr[j] = temp;
}
console.log(arr)
}
return arr;
}
var initArr = [10, 4, 8, 3];
insertSortFn(initArr);
我们看一下打印结果:
原数组:[10,4,8,3]
[4, 10, 8, 3]
[4, 8, 10, 3]
[3, 4, 8, 10]
标签:temp 返回 冒泡排序 注意 i++ 技术 code 例子 技术分享
原文地址:https://www.cnblogs.com/soyxiaobi/p/9588159.html