交换数组元素
// var arr = [3,6]
// // [6,3]
// // 交换数组元素
// var temp = arr[0]
// arr[0] = arr[1]
// arr[1] = temp
// console.log(arr);
var arr = [20, 30, 40, 50] // [20,40,30,50]
// 0 1 2 3
function swap(i, k) {
var temp = arr[i]
arr[i] = arr[k]
arr[k] = temp
console.log(arr);
}
swap(1,2)
冒泡排序
/*
思想:
由小到大排:
挨着两个数,两两比较,如是前一个数比后一个数大,交换位置,一轮之后最大的数沉底,
在未排序的数中重复以上操作,
arr[i] arr[i+1]
temp
if(arr[i] > arr[i+1]){
var temp = arr[i]
arr[i] = arr[i+1]
arr[i+1] = temp
}
j 冒泡次数 i 循环变量 比较次数
1 0 4
2 1 3
3 2 2
4 1 1
元素个数
n n-i-1
*/
//第一冒泡,得到最大的一个数,沉底
// for (var i = 0; i < arr.length; i++) {
// if (arr[i] > arr[i + 1]) {
// var temp = arr[i]
// arr[i] = arr[i + 1]
// arr[i + 1] = temp
// }
// }
// console.log(arr)
//第二次冒泡
// for (var i = 0; i < arr.length - 1; i++) {
// if (arr[i] > arr[i + 1]) {
// var temp = arr[i]
// arr[i] = arr[i + 1]
// arr[i + 1] = temp
// }
// }
// console.log(arr)
//第三次冒泡
// for (var i = 0; i < arr.length - 2; i++) {
// if (arr[i] > arr[i + 1]) {
// var temp = arr[i]
// arr[i] = arr[i + 1]
// arr[i + 1] = temp
// }
// }
// console.log(arr)
//第四次冒泡
// for (var i = 0; i < arr.length - 3; i++) {
// if (arr[i] > arr[i + 1]) {
// var temp = arr[i]
// arr[i] = arr[i + 1]
// arr[i + 1] = temp
// }
// }
// console.log(arr)
var arr = [89, 98, 78, 68, 76]
// j 外层循环表示冒泡排序次数
for (var j = 0; j < 5-1; j++) {
// 比较的次数
for (var i = 0; i < 5-j-1; i++) {
//挨着两个数,两两比较,如果前一个比后一个大,交换位置
if (arr[i] > arr[i + 1]) {
var temp = arr[i]
arr[i] = arr[i + 1]
arr[i + 1] = temp
}
}
console.log(arr)
}
console.log('================');
console.log(arr)
冒泡案例
// 冒泡排序
// var arr = [89, 98, 78, 68, 76]
// for(var i=0;i<arr.length;i++){
// for(var j=0;j<arr.length;j++){
// if(arr[j]>arr[j+1]){
// var temp = arr[j]
// arr[j] = arr[j+1]
// arr[j+1] = temp
// }
// }
// }
// console.log(arr)
选择排序
<!--
选择排序:
首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置(交换位置)
再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。
5 选择排序次数
n - 1
第一次选择排序: [89, 98, 78, 68, 76] -> [68], 98, 78, 89, 76
0 1 2 3 4
找最小值
1. 找最小值对应用索引号
var minIndex = 0
var min = arr[minIndex]
for(var j = 1; j < 5; j++){
if(arr[j] < min){
minIndex = j
}
}
//交换位置
var temp = arr[0]
arr[0] = arr[minIndex]
arr[minIndex] = temp
第二次选择排序 [[68], 98, 78, 89, 76] -> [68, 76], 78, 89, 98
最小值
1. 找最小值对应用索引号
var minIndex = 1
var min = arr[minIndex]
for(var j = 2; j < 5; j++){
if(arr[j] < min){
minIndex = j
}
}
//交换位置
var temp = arr[1]
arr[1] = arr[minIndex]
arr[minIndex] = temp
第三次选择排序 [68, 76], 78, 89, 98 -> [68, 76, 78 ], 89, 98
最小值
1. 找最小值对应用索引号
var minIndex = 2
var min = arr[minIndex]
for(var j = 3; j < 5; j++){
if(arr[j] < min){
minIndex = j
}
}
//交换位置
var temp = arr[2]
arr[2] = arr[minIndex]
arr[minIndex] = temp
第四次选择排序 [68, 76, 78 ], 89, 98 -> [68, 76, 78 , 89], 98
最小值
1. 找最小值对应用索引号
var minIndex = 3
var min = arr[minIndex]
for(var j = 4; j < 5; j++){
if(arr[j] < min){
minIndex = j
}
}
//交换位置
var temp = arr[3]
arr[3] = arr[minIndex]
arr[minIndex] = temp
-->
</head>
<body>
<script>
var arr = [89, 69, 78, 68, 88]
// 0 1 2 3 4
/*
[ 68 ], 98, 78,89 ,76]
0 1 2 3 4
[ 68 ,76], 78,89 ,98]
0 1 2 3 4
*/
var n = 5
// 外层循环,选择排序次数
for (var i = 0; i < n - 1; i++) { // i: 0 , 1
//找最小值索引号
var min = i //minIndex: 0 , 1
for (var j = i+1; j < 5; j++) { // 让后面的数依次与前面数比较, J :2
if (arr[j] < arr[min]) {
min = j //minIndex:4
}
}
//交换位置
var temp = arr[i]
arr[i] = arr[min]
arr[min] = temp
console.log('第'+ (i+1)+'次选择排序 :',arr);
}
案例
// 选择排序
// var newarr = []
// for(var i=0;i<arr.length-1;i++){
// var min = i
// for(var j=i+1;j<arr.length;j++){
// if(arr[min] < arr[j]){
// min = j
// }
// }
// var temp = arr[i]
// arr[i] = arr[min]
// arr[min] = temp
// }
数组去重
/*
方法一: arr.indexOf(元素)
=> 元素在数组中的下标,
=> 如果没有返回 -1
创建一个空数组,存储不重复的数
var newArr = []
基本思想: 遍历原数组,获取每个元素,判断是否已经存在新数组中,如果不存在,则放入新数组。
for(var i = 0; i<length; i++){
if( newArr.indexOf(arr[i]) == -1 ){
newArr.push(arr[i])
}
}
*/
function arrayToHeavy() {
var arr = [1, 2, 5, 1, 8, 4, 2] // [1,2,5,8,4]
var newArr = [] // 创建一个空数组,存储不重复的数
for (var i = 0; i < arr.length; i++) {
var item = arr[i] //原数组元素 //item: 1,2,5,1,8,4,2
if (newArr.indexOf(item) == -1) {
newArr.push(item) // [1,2,5,8,4]
}
}
console.log(newArr);
}
/*
方式二: splice(index,1)
var arr = [1, 2, 5, 1, 8, 4, 2] // [1,2,5,8,4]
1
1 2, 5, 8, 4, 2
2
2, 5, 8, 4
*/
function arraySplice() {
var arr = [1, 2, 5, 1, 1, 8, 4, 2] // [1,2,5,8,4]
for (var i = 0; i < arr.length; i++) {
var item = arr[i] //item: 1
for (var j = i + 1; j < arr.length; j++) {
if(item == arr[j]){ // 1-2 1-5 1-1
arr.splice(j,1) // [1, 2, 5, 1, 8, 4, 2]
j--
}
}
}
console.log(arr);
}
arraySplice()