js冒泡排序法——选择排序(other)——计数排序(桶排序)——快速排序——插入排序-更新(代码片段)

勇敢*牛牛 勇敢*牛牛     2022-11-29     768

关键词:

JavaScript排序算法

JavaScript——冒泡排序法

时间复杂度:O(nlogn)

冒泡排序的英文Bubble Sort,是一种最基础的交换排序。
之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动。

第一轮: 两两比较, 如果前一个大于后一个, 交换位置 一轮过后, 最大的放在了最后面
重复第一轮:
重复 length - 1 轮

从大到小

var array = [1,2,8,4,5,12];
for(var i =0;i<array.length;i++)
    for(var j=0;j<array.length-i-1;j++)
        if(array[j] < array[j+1])
            var count = array[j];
            array[j] = array[j+1];
            array[j+1] = count;
        
    

console.log(array);

从小到大

var array = [1,2,8,4,4,12];
for(var i =0;i<array.length;i++)
	for(var j=0;j<array.length-i-1;j++)
	    if(array[j] > array[j+1])
	        var count = array[j];
	        array[j] = array[j+1];
	        array[j+1] = count;
	    
	

	console.log(array);

JavaScript——选择排序

时间复杂度O(n^2)

算法思想:选择排序,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换
接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。

第一轮:
找到数组内最小的数据的索引
把最小的移动到最前面
第二轮:
找到除了第一个以外的内容中最小的数据的索引
把第二次找到的数字放在第二个位置
重复 length - 1 轮

从小到大

var min; //保存每次搜索到的最小值;
var index; //保存最小值的下标;

var array = [1,2,8,4,4,12];
for(var i = 0; i < array.length; i++)
    min = array[i]; //将未排序部分的最左边的数假设为最小值;
    index = i;
    for(var j = 0; j < array.length - i - 1; j++)
        if(array[j+i+1] >= min) //若大于最小值则继续;
            continue;
        else //更新最小值与下标
            min = array[j+i+1];
            index = j+i+1;
        
    
    array[index] = array[i]; //交换最小值与第一个被假设为最小值的元素位置;
    array[i] = min;

console.log(array);

从大到小

var min; //保存每次搜索到的最小值;
var index; //保存最小值的下标;
for(var i = 0; i < array.length; i++)
    min = array[i]; //将未排序部分的最左边的数假设为最小值;
    index = i;
    for(var j = 0; j < array.length - i - 1; j++)
        if(array[j+i+1] <= min) //若大于最小值则继续;
            continue;
        else //更新最小值与下标
            min = array[j+i+1];
            index = j+i+1;
        
    
    array[index] = array[i]; //交换最小值与第一个被假设为最小值的元素位置;
    array[i] = min;

console.log(array);

other

var arr  = [4,9,8,5,7,1,5,6,0,3]

var minIndex = 0
for(var j=0;j<arr.length;j++)
	for(var i=j+1;i<arr.length;i++)
	    if(arr[i]<arr[minIndex]) minIndex = i
	

	if(minIndex !== 0)
	     var tmp =arr[j];
	     arr[j]  = arr[minIndex];
	     arr[minIndex] = tmp
	 

console.log(arr);
console.log(minIndex);

JavaScript——计数排序(桶排序)

准备一个原始数组(001)
准备一个新的空数组(002)
遍历原始数组(001) 把每一个数据当做新数组(002)的索引
在新数组(002) 内的值当做个数来填充
遍历新数组(002) 把索引当数据填充回去, 填充多少个(值是多少填充多少个)

var arr  = [7,3,24,5,20,1,0,12,10,0,5]
var temp = []//计个数
for(var i=0;i<arr.length;i++)
	//把原始数组内的数据当做新数组内的索引使用
    temp[arr[i]] ? temp[arr[i]]++ : temp[arr[i]] = 1     

arr.length = 0;

console.log(temp);

for(var i=0; i<temp.length; i++)
    if(!temp[i]) continue
    // 回填的个数
    var count = temp[i];
    // 回填的数据
    data = i;
    // 多相同数字一次赋值
    for(var j=0;j<count;j++)
        arr[arr.length] = data
    


console.log(arr);

JavaScript——快速排序(递归二分法)

逻辑:

排序算法 - 快速排序(递归二分法)
逻辑:

把一个数组拿出最中间一个数据
把数组中剩下的数据和这个中心位置数据比较
准备两个新数组, 一个叫做 left 一个叫做 right
小的放在 left 内, 大的放在 right 内
递归把 左边的数组 和 右边的数组 按照之前的方法继续

function quickSort(arr)
    if(arr.length <= 1)
        return arr
    
    var centerIndex = parseInt(arr.length/2)
    var center  = arr.splice(centerIndex,1)[0]

    var left  =[],right= [];
    for(var i=0;i<arr.length;i++)
        if(arr[i] < center) left.push(arr[i])
        else right.push(arr[i])

    
    return quickSort(left).concat(center,quickSort(right))
    //或者
    return [...quickSort(left),center,...quickSort(right)]


var res = quickSort(arr)
console.log(res);

JavaScript——插入排序

=> 直接遍历数组([1] 开始遍历)
	-> 把当前这个索引位置数据拿出来
	-> 从当前位置的前一个位置开始向前比较
	-> 如果 没循环到头 && 我比前一个大
+ 让前一个占领当前的位置
	-> 把自己放在这个位置

<h1>一起吃火锅唱歌跳舞</h1>
<script>
    var arr =[4,7,5,3,2,4,9,1,8,6]
    console.log('原始数据:',arr);
    for(var i=1;i<arr.length;i++)
        var temp = arr[i];
        var j=i-1
        for(;j>=0 && temp > arr[j];j--)
            arr[j+1] = arr[j] 
        
        console.log(arr);
        arr[j+1] = temp

        console.log('变化后的:',arr);
    

java例题_28冒泡排序

...用第二个元素与后8个进行比较,并进行交换。5*/6/*分析7*冒泡排序法:8*利用数组得到键盘上的一组数据并保存,再通过冒泡排序法得到新的数组9*使用两层for循环,外面一层判断排序排到哪儿了,里面一层用于遍历剩下需要排... 查看详情

快排,冒泡排,选择排序,希尔排序

packagecn.hncu.dataStruct;publicclassSortMethods{/* 算法好坏的评价指标(一般只在n值非常大的时候才会考虑,如n取10万): *1、时间复杂度:通俗点,就是指程序运行的快慢(时间)---通常用计算机的运算(算术,赋值)次数来代替 *2、空间复杂度... 查看详情

数组冒泡排序选择排序二分查找法

1数组高级冒泡排序原理图解【掌握】画图演示需求:数组元素:{24,69,80,57,13}请对数组元素进行排序。冒泡排序相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处2数组高级冒泡排序代码实现【掌握】案例... 查看详情

排序算法第一篇(简单桶排选择排序冒泡排序快速排序)

简单桶排序1/**2*@author:攻城狮小白3*@creationTime:2017年11月24日下午10:37:594*@description:桶排序(这个不是真正的桶排,真正的桶排比这个稍微复杂些。但是是桶排的思想,就叫它简单桶排吧)5*@questionDesc:一个班上有6名同学,考试成绩如... 查看详情

总结4种常用排序(快排选择排序冒泡排序插入排序)(代码片段)

一、选择排序概念理解:在一个长度为3的数组中,在第一趟遍历3个数据,找出其中最小的数值与第一个元素交换;第二趟遍历2个数据,找出其中最小的元素与第一个数交换(注意:这里的第一个数是指遍历的第一个数,实质上是数... 查看详情

冒泡法和选择排序法(比较容易写混)

1#include<stdio.h>234//冒泡排序法56voidbubbling(inta[],intn);78//选择排序法9voidchoose(inta[],intn);10intmain()11{12inti;13ints[6];14printf("pleaseenterfivenumbers: ");15for(i=1;i<6;i++)16{17scanf("%d 查看详情

关于java中的选择排序法和冒泡排序法

一,这种方法是直接传入一个数组进行排序(选择排序法)publicstaticvoidselectSort(intarr[]){ for(inti=0;i<arr.length-1;i++){ for(intj=i+1;j<arr.length;j++){ if(arr[j]<arr[i]){ inttemp=arr[i]; arr[i]=arr 查看详情

八大排序算法(代码片段)

...希尔排序(缩小增量排序)选择排序堆排序堆向下调整算法冒泡排序快速排序hoare版本三数取中法优化挖坑法前后指针版本快速排序非递归归并排序计数排序直接插入排序直接插入排序是一种简单的插入排序法,其基本思想是&#x... 查看详情

排序---内部排序算法(快排希尔排序归并排序基数排序冒泡选择排序)比较

1。内部排序的复杂度总结1)时间复杂度4种排序的平均时间复杂度是O(nlog2n),“快些以nlog2n的速度归队”(快排、希尔排序、归并、堆排序) 最坏情况下,快排的时间复杂度为O(n*n)2)空间复杂度O(log2n)快排O(n)归... 查看详情

十大排序总结(js实现稳定性内外部排序区别时间空间复杂度冒泡快速直接选择堆直接插入希尔桶基数归并计数排序)(代码片段)

...性 内部排序外部排序 十种排序算法特点总结交换排序冒泡排序(数组sort方法的原理)图解 js实现特点快速排序图解js实现特点选择排序直接选择排序图解 js实现特点堆排序大(小)顶堆非叶节点js实现 特点插... 查看详情

冒泡法(代码片段)

冒泡法标签(空格分隔):python-排序算法冒泡法介绍三大基础排序算法之一冒泡法属于交换排序两两比较大小,交换位置。结果分为升序和降序排序时间复杂度n*(n-i-1)=n**2代码实现lst=[5,6,7,8,9,10,11,12,15,14]#待排序列表length=len(lst)#长... 查看详情

冒泡排序,选择排序,插入排序,归并排序(代码片段)

 1.冒泡排序冒泡排序的思想,将数组分为已排(右边)和未排(左边)两部分。排序时每次在未排部分从左向右一次比较相邻2个元素,如果左大于右则互换位置。每次都是指针从左边第一个依次相邻比较,到指针指向倒数第... 查看详情

java冒泡排序和选择排序法

/*需求:定义一个函数接收一个int类型的数组对象,把数组中的最大值放在数组中的第一位。选择排序(直接排序):使用一个元素与其他的元素挨个比较一次,符合条件交换位置。*/classDemo9publicstaticvoidmain(String[]args) int[... 查看详情

算法之旅|冒泡排序法

冒泡排序法HTML5学堂-码匠:本期继续走入算法——冒泡排序法。冒泡排序算法相对简单,容易上手,稳定性也比较高,算是一种较好理解的算法,也是面试官高频提问的算法之一。Tips:关于“算法”及“排序”的基础知识,在此... 查看详情

2023数据结构考研复习-排序(代码片段)

...)十大排序算法Java版插入排序折半插入排序希尔排序冒泡排序快速排序选择排序堆排序归并排序综合应用题双向冒泡排序算法奇数移动到偶数前面快排枢纽值随机快排找第k小元素荷兰国旗图案2016年真题单链表进行选择排序... 查看详情

java编程的冒泡等排序示例

...1)插入排序(直接插入排序、希尔排序)2)交换排序(冒泡排序、快速排序)3)选择排序(直接选择排序、堆排序)4)归并排序5)分配排序(箱排序、基数排序)所需辅助空间最多:归并排序所需辅助空间最少:堆排序平均... 查看详情

八大排序介绍(代码片段)

...见的排序算法1.插入排序2.希尔排序3.选择排序4.堆排序5.冒泡排序6.快速排序hoare版本挖坑法前后指针版本7.归并排序8.计数排序三、总结排序算法复杂度及稳定性分析一、排序是什么?  排序是计算机内经常进行的一种操作&... 查看详情

[leetcode]排序算法(冒泡排序,选择排序,插入排序,快速排序,计数排序)(代码片段)

目录1.冒泡排序原理 代码(python&cpp)拓展:timeit()用法2.选择排序原理3.插入排序原理代码(python&cpp)4.归并排序原理代码 5.快速排序原理代码(python&cpp)6.计数排序原理 代码(python&c... 查看详情