冒泡排序
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端,故名。
function sortMethod(arr) {
// 交换两个数组项的位置
var swap = function(firstIndex, secondIndex) {
var temp = arr[firstIndex];
arr[firstIndex] = arr[secondIndex];
arr[secondIndex] = temp;
};
// 升序排列
var bubbleSort = function() {
var i, j, stop, len = arr.length;
for (i=0; i<len; i=i+1) {
for (j=0, stop = len - i; j<stop; j=j+1) {
// 将这里的'>'换成'<'即为降序排列
if (arr[j] > arr[j+1]) { swap(j, j+1); }
}
}
}();
}
插入排序
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——
插入排序法
,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,
时间复杂度
为O(n^2)。是稳定的排序方法。插入算法把要排序的
数组
分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第二部分就只包含这一个元素。在第一部分排序后,再把这个最后元素插入到此刻已是有序的第一部分里的位置
function sortInsert(array){
var i=1,j,len=array.length,val;
for(;i<len;i++){
j=i;
val=array[j];
while(--j>-1){
if(array[j]>val){
array[j+1]=array[j];
}else{
break;
}
}
array[j+1]=val;
console.log(array);
}
return array;
}
快速排序
快速排序(Quicksort)是对
冒泡排序
的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以
递归
进行,以此达到整个数据变成有序序列。
var quickSort = function(arr) {
if (arr.length <= 1) { return arr; }
var pivot = arr.splice(0, 1)[0];//比较元素一般默认为数组的第一个元素
var left = [];
var right = [];
for (var i = 0; i < arr.length; i++){
if (arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return quickSort(left).concat(pivot, quickSort(right));
};
选择排序
function selectionSort(data)
{
var i, j, min, temp , count=data.length;
for(i = 0; i < count - 1; i++) {
min = i;
for (j = i+1; j < count; j++){
if (data[j] < data[min]){
min = j;
}
}
temp = data[i];
data[i] = data[min];
data[min] = temp;
}
return data;
}
为什么说选择排序不稳定呢,举个例子:
序列5 8 5 2 9,从小到大排序,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。