首页 > 其他分享 >多种数组排序方法

多种数组排序方法

时间:2023-02-01 10:01:16浏览次数:58  
标签:function 多种 temp ++ lo hi 数组 var 排序


1.随机生成数据

var a = (function (){
var a = [];
function randomInt(from, to){
return parseInt(Math.random() * (to - from + 1) + from);
}
for (var i = 0; i < 10000; i++){
a.push(randomInt(0, 1000000))
}
return a;
})();

2.插入排序

function insertionSort(){
var date = new Date();
for (var i = 1; i < a.length; i++){
var temp = a[i];
for (var j = i - 1; j >= 0 && a[j] > temp; j--){
a[j + 1] = a[j];
}
a[j + 1] = temp;
}
console.log("插入排序的时间:" + (new Date() - date));
}

3.希尔排序

function shellSort(){
var date = Date.now();
for (var gap = a.length >> 1; gap > 0; gap >>= 1){
for (var i = gap; i < a.length; i++){
var temp = a[i];
for (var j = i - gap; j >= 0 && a[j] > temp; j -= gap){
a[j + gap] = a[j];
// console.log(a[j])
}
a[j + gap] = temp;
console.log(a[i],a[j])
console.log(a)
}
}
console.log("希尔排序的时间:" + (new Date() - date));
}

4.归并

function merge(a, b, lo, mid, hi){
//每次归并前,都需要先把a中的数据copy到b中。
for (var i = 0; i < a.length; i++){
b[i] = a[i];
}
var i = lo, j = mid + 1;
for (var k = lo; k <= hi; k++){
if (i > mid){
a[k] = b[j++];
}else if (j > hi){
a[k] = b[i++];
}else if (b[i] < b[j]){
a[k] = b[i++];
}else{
a[k] = b[j++]
}
}
}

5.归并排序

function sort(a, temp, lo, hi){
if (lo >= hi) return;
var mid = (hi + lo) >> 1;
sort(a, temp, lo, mid); //左半部分排序
sort(a, temp, mid + 1, hi);//右半部分排序
merge(a, temp, lo, mid, hi);
}

6. 快速排序

function quickSort(a, lo, hi){
if (lo >= hi) return;
var j = quickPartition(a, lo, hi);
quickSort(a, lo, j - 1);
quickSort(a, j + 1, hi);
}

7.快速排序的切分

function quickPartition(a, lo, hi){
var i = lo, j = hi + 1; //左右扫描指针
var p = a[lo]; //切分元素
for (; ;){
//扫描左右,检查扫描是否结束,并交换元素
while (a[++i] <= p){
if (i == hi) break;

}
while (a[--j] >= p){
if (j == lo) break;
}
//如果左指针超过了右指针则结束
if (i >= j) break;
//交换左右的元素
exch(a, i, j);
}
//把a[lo]添加到指定的位置
exch(a, lo, j);
return j;
}
function exch(a, m, n){
var temp = a[m];
a[m] = a[n];
a[n] = temp;
}


标签:function,多种,temp,++,lo,hi,数组,var,排序
From: https://blog.51cto.com/u_14389461/6030687

相关文章

  • 对象数组去重。
    newSet()去重不能对对象使用,如下。对象并没有重复的概念。即使是用了,也去不了重,像该例子中的{name:1}。那要怎么去重呢,使用深拷贝循环去重?在网上查了下,直接使用......
  • 数组构造+逆元
    牛客2023寒假训赛3B请确保在尝试本题时了解数论中同余等式的相关内容。如不了解同余以及同余等式的相关性质,可以到oiwiki进行学习了解后再尝试本题。oiwiki同余(性质)......
  • 数组越界判定,这样更优雅
    目录背景优雅的解决方法验证越界使用验证常规使用结论背景在使用数组(swift)的编码过程中,不让程序崩溃是基本的要求,特别是在团队合作中时。如果直接下面代码,会出现什么......
  • spring boot——json解析示例——fastjson——使用fastJson将json与对象、集合、数组
                 ......
  • 博客一号 快速排序
    从零开始的算法之路——基础算法之快速排序有了sort函数为什么还要学习其他的排序,的确也看起来比较多余(就目前来看我做的排序题都能用sort解决),但是里面算法中的思想才是......
  • Java插入排序
    下面我们创建一个java程序,实现使用插入排序对数组元素进行排序。插入排序对于小元素是有好处的,因为排序大量元素它需要更多的时间。让我们来看看一个简单的java程序,使......
  • Java选择排序
    在这个示例中,我们创建一个java程序,实现使用选择排序对数组元素进行排序。在选择排序算法中,搜索最低的元素并将其排列到适当的位置。用下一个最小的数字交换当前元素。......
  • Java气泡排序
    在教程中,将创建一个java程序,使用冒泡排序对数组元素排序。气泡排序算法也被称为最简单的排序算法。在冒泡排序算法中,数组从第一个元素遍历到最后一个元素。这里,将当前......
  • P59 稀疏数组
    需求:编写五子棋游戏中,有存盘退出和续上盘的功能。分析问题:因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据。解决:稀疏数组。压缩稀疏数组介绍当一......
  • Educational Codeforces Round 126 (Rated for Div. 2) D. Progressions Covering(贪心
    题目https://codeforces.com/problemset/problem/1661/D题意给一个长度为n的数组a,和一个正数k,每次在数组a中选取连续的k个元素每个元素减去1,2,3……k问至少要......