//冒泡排序
sort(elements){
for (let i = 0; i < elements.length - 1; i++){
for(let j = 0; j < elements.length - 1 - i; j++){
if(elements[j] < elements[j + 1]){
let temp = elements[j];
elements[j] = elements[j + 1];
elements[j + 1] = temp;
}
}
}
console.log(elements);
}
//快速排序
quickSort(elements){
if (elements.length <= 1 ){
return elements;
}
var mid = Math.floor(elements.length / 2);
var val = elements[mid];
var left = [];
var right = [];
for (let i = 0; i <elements.length; i++){
if (elements[i] > val){
right.push(elements[i]);
}else if(elements[i] < val){
left.push(elements[i]);
}
}
// concat() 方法用于连接两个或多个数组。此方法返回一个新数组,不改变原来的数组。
// arrayObject.concat(array1,array2,...,arrayN)
return this.quickSort(left).conact([val], this.quickSort(right));
}
//快速排序
quick_sort(s, start , end )
{
if (start < end)
{
//Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
var i = start , j = end , x = s[start];
while (i < j)
{
while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
this.quick_sort(s, start, i - 1); // 递归调用
this.quick_sort(s, i + 1, end );
}
}
//插入排序
insertSort(element){
for (let i = 1; i < element.length; i++){
// 如果i的值比i-1大,那就不需要排序了
if (element[i] < element[i - 1]){
let startJ = i - 1;
let keyVal = element[i];
//由于keyVal小于element[startJ],那么把关键字element[startJ]往后移动一个位置
while (startJ >= 0 && keyVal < element[startJ]){
element[startJ + 1] = element[startJ];
startJ--;
}
element[startJ + 1] = keyVal;
}
}
}
//哈希排序
shellSort(elements)
{
if (elements.length==0)
{
return;
}
let len = elements.length;
let step = Math.floor(elements.length/2);
while(step>0)
{
for (let i= step;i<elements.length;i++){
let j = i;
while(j >= step && elements[j] < elements[j-step])
{
var temp = elements[j];
elements[j] = elements[j-step];
elements[j-step] = temp;
j -=step;
}
}
step=Math.floor(step/2);
}
}