这次主要包括冒泡排序,插入排序与选择排序。
冒泡排序是数据结构排序中最简单的一种,通过重复遍历数组,每次比较两个元素,如果大小顺序不同则将他们交换位置。遍历的次数为数组长度。
我们先看一个例子: [1,5,3,8,2]。
我们要将此数组从小到大排序。通过冒泡的话,每次比较两个,那么第一次遍历数组,每一次比较的结果为:
原始数组:[1,5,3,8,2]
[1,5,3,8,2]—>[1,3,5,8,2]—>结果:[1,3,5,2,8]
第一次遍历数组的比较过程: 第一次:1 5 第二次:5 3 顺序错误,交换位置 第三次:5 8 第四次:8 2 顺序错误,交换位置。
第二次遍历数组的比较过程:[1,3,5,2,8]–>[1,3,2,5,8]
第三次遍历数组的比较过程:[1,3,2,5,8]–>[1,2,3,5,8]
比较结束。
程序如下:
1 | var arr = [1,5,3,8,2]; |
插入排序,假定数组的第一位为已排序数组,即后面的数组为未排序数组,此时要将后面的数组每次都挑出一个数,根据顺序插入到之前的已排序数组。
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 arr = [2,1,5,2,1];
window.onload = function(arr){
for(i=1;i<arr.length;i++){ //循环遍历数组arr
temp = arr[i];//定义一个变量来存储当前要进行插入的数组元素
j = i;
//开始定义内层循环
for(;j > 0 && arr[j-1] > temp;j--){
//进行内层,循环如果这个变量前一个数据大于它,,则j--
arr[j] = arr[j-1];
//将上一个元素的值赋值给当前元素
}
//j-- -->j=j-1;
arr[j] = temp;
}
alert(arr);
}
选择排序,通过定义一个下标,定义一个“最小数”。每次遍历数组,都将每个数的下标赋给游标,将第一个数赋给“最小数”。当向后查找元素时,当找到一个更小数时,游标切换到此数,同时“最小数”切换到此处。当查找到终点时,将最小数赋值给第一个数,同时第一个数赋值给查找到最小数的位置。
1 | var p = [2, 4, 3, 1, 7, 5, 6, 9, 6, 0]; |
这并不是最好的快速排序,因为每次都会产生两个新数组。
1 | function quickSort(arr){ |