今天整理一下我理解的四种排序算法,分别是:冒泡排序、选择排序、插入排序、和快速排序。除了快速排序让我有点蒙以外,其他三种排序自我感觉还是很好理解和书写的。
冒泡排序
从头进行两两对比,第一个跟第二个比较,如果前面的数比后面的大,那么就进行位置交换,之后第二个再跟第三个比较,以此类推。这个时候最后的一个数一定是数组里最大的数,一趟对比结束后,再循环这样的比较,最终完成从小到大排列。
function sort(arr){
var temp;
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length - 1 - i; j ++) {
if (arr[j] < arr[j + 1]) {
continue;
}else{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
var arr = [5, 7, 4, 2, 9, 1, 8, 6, 3];
sort(arr);
console.log(arr);
跑了一下,没什么问题。刚开始学习JavaScript,有那里不规范的,可以改进的,可以随时告诉我,我也会虚心学习滴~
选择排序
每次都从剩下的数组里面选出最小的数进行有序的排列。
function sort(arr){
var min,temp;
for (var i = 0; i < arr.length - 1; i++) {
min = i;
for (var j = i +1; j < arr.length; j++) {
if (arr[j] > arr[min]) {
continue;
}
min = j;
}
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
var arr = [5, 7, 2, 9, 1, 8, 6, 3];
sort(arr);
console.log(arr);
插入排序
插入排序就像抓牌打扑克一样,每次都从无须数组中拿出一个数,插入到有序数组里的适当位置以保持有序数组的有序。
function sort(arr){
var temp;
for (var i = 1; i < arr.length; i++) {
for (var j = i - 1; j >= 0; j--) {
if (arr[j + 1] > arr[j]){
break;
}
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
var arr = [5, 7, 2, 9, 1, 8, 6, 3];
sort(arr);
console.log(arr);
快速排序
快速排序虽然叫快速,但是我觉得从费脑方面来说,一点也不快速(也可能是我智商不够)。让我来白话的解释一下我理解的快速排序,首先要选择一个数作为基点,我一般会选择第一个数,并且把这个位置记为i,然后让数组里剩下的数从最后一个数开始(把这个位置记为j)和这个基点进行比较,如果这个数大于基点,那么j– ,如果这个数小于基点,那么将两个数进行交换,然后不再从后往前看,而是从第一个数开始从前往后比较,这个时候就需要i++,然后同样的,如果这个数比基点数小,就i++,如果这个数比基点数大,就把数进行交换,并且更换方向j–,又从j开始从后往前进行比较,以此类推,知道i=j;这个时候基点左边的数都是小于基点的数,基点右边的数都是大于基点的数,这就把一个数组分成了两部分(也就是分区),再分别把这两个部分进行相同方法的进行分区,直到不能再进行分区,这个时候整个数组就已经排列完成了。
function sort(arr, left, right){
if (right - left > 0){
var i = partSort(arr,left,right);
sort(arr, left, i - 1);
sort(arr, i + 1, right);
}
}
function partSort(arr,left,right){
var i = left, j = right,temp,t = i;
while (i != j){
if (t == i){
if (arr[j] > arr[i]){
j--;
}else{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
t = j;
i++;
}
}else{
if (arr[i] < arr[j]){
i++;
}else{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
t = i;
j--;
}
}
}
return i;
}
var arr = [5, 7, 2, 9, 1, 8, 6, 3];
sort(arr, 0 , arr.length - 1);
console.log(arr);
好了,四种排序的js代码都在这里了,都是按照我理解的来写的,希望看到的大神可以给我指导一下,或者是也在学习的朋友,希望能给你们一点启发。
moliy大人在哪儿,学霸就在哪儿~~~~