1.用数组实现排序
function ArrayList(){
var array=[];
}
2.冒泡排序
从第一个开始,进行两两排序,如果后面的小于前面的,进行交换。
ArrayList.prototype.swap=function(m,n){
var temp=this.array[m]
this.array[m]=this.array[n]
this.array[n]=temp
}
// 冒泡排序 (n-1)+(n-2)+(n-3)+...+1=N*(N-1)/2
ArrayList.prototype.bubblesort=function(){
var length=this.array.length
for(var j=length-1;j>=0;j--){
for(var i=0;i<j;i++){
if(this.array[i]>this.array[i+1]){
this.swap(i,i+1)
}
}
}
}
3.选择排序
1.直接选择排序,从min=0开始,查找最小的值与min进行交换(4,3,2,1)min=0,值为4,第一轮查找,变为(1,3,2,4)
第一轮完毕min=1,将最小值与min值进行交换 第二轮min=1,从3开始查,变为1,(2,3,4).
第三轮1,2,(3,4)
// 选择排序n*(n-1)/2
ArrayList.prototype.selectionSort=function(){
// q.获取数组的长度
var length=this.array.length
for(var j=0;j<length-1;j++){
var min=j
for(var i=min+1;i<length;i++){
if(this.array[min]>this.array[i]){
min=i
}
}
this.swap(min,j)
}
}
4.插入排序
3,6,4,2,11,10,5
第一轮:将3与6做比较 3,6,4,2,11,10,5
第二轮:将4与3,6做比较,3,4,6,2,11,10,3
第三轮:将2与3,4,6做比较2,3,4,5,11,10,3
// 插入排序 n*(n-1)/4
ArrayList.prototype.insertionSort=function(){
var length=this.array.length
for(var i=1;i<length;i++){
// 和前面的数据依次进行比较
var temp=this.array[i]
var j=i
while(this.array[j-1]>temp&&j>0){
this.array[j]=this.array[j-1]
j--
}
//
this.array[j]=temp
}
}
5.希尔排序
8,5,6,1,7,3,2,4
1.一般的初次取序列的一半为增量,以后每次减半,直到增量为1。所以增量是8/2=4分为四组
第一轮:(8,7)(5,3)(6,2)(1,4)对分组进行插入排序所以是7,3,2,1,8,5,6,4 第二轮增量是4/2=2两组
......
知道增量等于1,最后执行插入排序
// 希尔排序
ArrayList.prototype.shellSort=function(){
var length=this.array.length
// 2初始化增量
var gap =Math.floor(length/2)
// while 循环(gap不断减少)
while(gap>=1){
// 4.以gap作为间隔,进行分组,对分组进行插入排序
for(var i=gap;i<length;i++){
var temp=this.array[i]
var j=i
while(this.array[j-gap]>temp&&j>gap-1){
this.array[j]=this.array[j-gap]
j-=gap
}
// 5.将j位置的元素赋值temp
this.array[j]=temp
}
gap=Math.floor(gap/2)
}
}