排序算法学习

搜索学习进行中……

排序

比较排序法:

冒泡排序

冒泡排序算法的原理如下:

比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

1.查找列表内最后两位,比较大小,按照小—>大顺序排列:
举例:25680931
25680931 —> 25680913

2.然后前进一位,继续查找:

25680913 —> 25680193

3.重复性对比每个位置的排序,最后最小的会被移动到最前端,也就是最左端,变成这样:

25680913 —> 25680193
25680193 —> 25680193
25680193 —> 25608193
25608193 —> 25068193
25068193 —> 20568193
20568193 —> 02568193

25680931 —> 02568193

4.再次从末尾进行同样排序操作,这次最小的1排到了第二位:
02568193 —> 01256839

5.重复动作,直到达到排序目的:
25680931 —> 01235689

JS测试(用JS比较方便,可以直接试验):

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>冒泡</title>
<script>
bubbleSort(arr){
     var i = arr.length,j;
  var temp;
  
  while(i > 0){
     for(j=0;j<i-1;j++){
     if(arr[j]>arr[j+1]){
          temp = arr[j];
        arr[j] = arr[j+1];
        arr[j+1] = temp;
      }
    }
    i--;
  }
  return arr;
}

function bubbleSorto(){
     var arr =  [9,1,3,0,5,2,4,6,8,7];
     var arrSort = bubbleSort(arr);
     alert(arrSort);
}
</script>
</head>
<body>
<button onclick="bubbleSorto();" value="clock me">click me</button>
</body>
</html>

选择排序

*通过线性搜索数列,找到最小值或最大值放到第一位,然后再依次寻找最小值或者最大值放到第二位。重复操作直到排序完成

插入排序

*思想:拿右侧的依次类比左侧大小,然后进行调换排序;

*假设第一位固定,然后取第二位与第一位相比,如果第一位数字较大,则交换两者位置。

*再取第三位与左侧第二位相比,比较大小,如果需要较小就交换位置。再比较左侧第一位,如果仍然小于第一位,则与第一位交换位置。
依次拿后一位与前一位进行对比,交换,直到达到排序目的

堆排序

*利用堆的数据结构,按照降序构建堆
比如数组[9,8,5,3,2,1,4]存到堆里就是这样:

1
2
3
4
5
8
9

然后再从大到小取出,然后按照相反的顺序排列,达到排序的目的

一般堆里面的排列是这样的:

A B C D E F G

A
B
C
D
E
F
G

归并排序

快速排序

非比较排序法:

计数排序

桶排序

基数排序

聚类

k-均值算法

列表搜索

线性搜索

二分搜索

图标搜索

广度优先搜索

深度优先搜索

贝尔曼-福特算法

戴克斯特拉算法

A*搜索算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值