发表日期: 2021-05-07 14:07:49 浏览次数:198
新安400电话申请开通【新安企业网站建设】新安微信公众号小程序开发运营价格、新安微信公众号APP软件客户端设计运营、新安网页页面设计公司费用、新安公司网站制作方案流程改版维护大概需要多少钱
新安县位于河南省洛阳市西部,地处北纬34°36′至北纬35°05′,东经111°53′至112°19′之间。北临黄河,与济源市及山西省垣曲县隔河相望;南与宜阳县接壤;西与渑池县及义马市为邻;东与洛阳市孟津区等 [27] 毗连。
新安历为十三朝古都洛阳畿地和西方门户,地扼函关古道,东连郑汴,西通长安,自古为中原要塞,军事重地。当代,陇海铁路及310国道、连霍高速公路横贯东西,更成为连接祖国西北、华东及华北间的重要通道。
新安不仅是河南省48个扩权县和50个对外开放重点县之一,也被誉为中西部地区发展潜力最大、最具活力的县市之一。 [1] 2020年7月29日,入选2019年重新确认国家卫生乡镇(县城)名单。 [2] 2020年11月,入选第六届全国文明城市 [3] 。
2020年11月,入选 “2020年中国工业百强县(市)”,排名第84位。 [4] 11月27日,被评为省级森林城市 [5] 。
2020年,新安县完成地区生产总值530亿元,同比增长4%,一般公共预算收入28.14亿元,同比增长5.9%;规模以上工业增加值同比增长4.7%;固定资产投资同比增长7.1%;社会消费品零售总额完成112.4亿元;城乡居民人均可支配收入分别达到38312元、18596元。 [29]
冒泡
n 次比较相邻两数并交换找到最值,然后 n-1 次比较找到次值……较小的数字像气泡一样浮出。
这里我引入flag排除:已经有序却一直遍历
function bubbleSort(arr){
const n=arr.length;
let flag=1,i,j;
for(i=0;i<n-1&&flag;i++){
//最坏的情况需要依次比较出最小值、次小值、次次小值
flag=0;//如果交换了就变
for(j=0;j<n-i-1;j++){
if(arr[j]>arr[j+1]){
const swap=arr[j];
arr[j]=arr[j+1];
arr[j+1]=swap;
flag=1;
}
}
}
return arr;
}
简单选择排序
和冒泡原理相似,但是少了很多交换,多了一个暂存最值的空间。
n 次比较相邻两数后最多只交换一次将最值放到位置上,然后 n-1 次比较找到次值
冒泡更适合基本有序的序列
function selectSort(arr)
{
const n=arr.length;
let i,j,minIndex;
for(i=0;i<n-1;i++){
minIndex=i;//先决定谁最小
for(j=i+1;j<n;j++){
if(arr[j]<arr[minIndex]){
minIndex=j;
}
}
if(minIndex!=i){
const swap=arr[i];
arr[i]=arr[minIndex];
arr[minIndex]=swap;
}
}
return arr;
}
直接插入
维护一个渐长的有序队列
function insertSort(arr)
{
const n=arr.length;
let i,j,k;
for (i = 1; i < n; i++)
{
// a[i]插入前面的有序区间a[0...i-1]
for (j = i - 1; j >= 0; j--){
if (arr[j] < arr[i])break;
}
//这里有两种可能,需要插入前面、不需要
if (j != i - 1){//需要插入
//后移一位,空出位置给arr[i]
const temp = arr[i];
for (k = i - 1; k > j; k--)
arr[k + 1] = arr[k];
//将a[i]放到正确位置上
arr[k + 1] = temp;
}
}
return arr;
}
希尔排序(进阶版插入)
相比直接插入,多了一个维度。
利用gap划分小组
gap由大变小
每个小组进行直接插入排序
注意呀,JavaScript除法没有默认取整,需要借助parseInt方法
function shellSort(arr)
{
const n=arr.length;
let i, j, gap;
for (gap =parseInt(n/2); gap> 0; gap=parseInt(gap/2)){//依次缩小比较间隙
for (i = gap; i < n; i++){//gap分组
for (j = i - gap; j >= 0 && arr[j] > arr[j + gap]; j -= gap){//每个分组进行插入排序
console.log("j:"+j);
const temp=arr[j + gap];
arr[j + gap]=arr[j];
arr[j]=temp;
}
}
}
return arr;
}
快速排序
平均时间复杂度=O(n logn)
序列基本有序状态时,快速排序退化为O(n^2)
function quick_part(arr,left,right){
//留下left和right后面递归
var l = left;
var r = right;
var basic= arr[left]; //arr[left]即basic的原位置
if(left >= right){ //如果数组只有一个元素
return;
}
while(l!=r){//两者相遇,意味着一直到找到basic的位置
while(arr[r] > basic && l < r){ //l<r随时注意严格控制哨兵不能错过,从右边向左找第一个比key小的数,找到或者两个哨兵相碰,跳出循环
r--;
}
while(arr[l] <= basic && l < r){ //这里的=号保证在本轮循环结束前,key的位置不变,否则的话跳出循环,交换l和left的位置的时候,left位置的上元素有可能不是key
l++;
}
//1、两个哨兵到找到了目标值。2、j哨兵找到了目标值。3、两个哨兵都没找到(key是当前数组最小值)
if(l!=r){ //交换两个元素的位置
const swap = arr[l];
arr[l] = arr[r];
arr[r] = swap;
}
}
arr[left] = arr[l] //arr[left]即basic的原位置
arr[l] = basic;
quick_part(arr,left,l-1);
quick_part(arr,l+1,right);
}
function quickSort(arr){
quick_part(arr,0,arr.length-1);
}
归并排序
function merge(left,right){
var temp=[];
while(left.length&&right.length){//取小的
if(left[0]<right[0]){
temp.push(left.shift());
}else{
temp.push(right.shift());
}
}
console.log("s:"+temp);
//left和right长度不一样时,直接连接剩下的长的部分(本身有序)
return temp.concat(left,right);
}
function mergeSort(arr){
if(arr.length<=1){
return arr;//打破后面return中的递归,有返回值了就去执行merge
}
var mid=Math.floor(arr.length/2);//
var left=arr.slice(0,mid);
var right=arr.slice(mid);
i++;
console.log(i+":"+left+right);
return merge(mergeSort(left),mergeSort(right));
}
堆排序
JavaScript的除法不是整除,另外提供了不同的取整方法
大顶堆的分析:
数组映射堆的下标分析
过程分析(结合代码)
大顶堆的代码实现
var len; //全局的len,控制大顶堆的长度,实现在原数组上的调整
function swap(arr, i, j) {
const temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
function heapSort(arr) {
//通用方法
function maxHeapify(arr, i) { //调整以i为根的树为大顶堆,
var left = 2*i+1,
right = 2*i+2,
largest = i; //暂定根节点最大
if (left < len && arr[left] > arr[largest]) {
largest = left;
}
if (right < len && arr[right] > arr[largest]) {
largest = right;
}
if (largest != i) { //当该树不知三个节点的时候,如果做出了调整可能破坏了子的大顶堆,需要条件递归
swap(arr, i, largest); //交换最大的为父节点
maxHeapify(arr, largest); //交换后,原值arr[i](往下降了)(索引保存为largest)
//作为根时,子节点可能比它大,因此要继续调整
//往下查看
}
}
//构建大顶堆
function buildMaxHeap(arr) { //对每一个节点(非叶节点),做堆调整
len = arr.length;
//从最后一个有子节点开始,构建是自底向上的
for (var i = Math.floor(len/2)-1; i>=0; i--) {
maxHeapify(arr, i);
}
}
//输出顺序,并不断维持大顶堆
function orderQ(arr) {
//把最大的数放到最后,然后全局len--=》让大顶堆减少一个数,再调整维持大顶堆
for (var i = arr.length-1; i > 0; i--) {
swap(arr, 0, i);
len--;
maxHeapify(arr, 0);
}
}
buildMaxHeap(arr);
orderQ(arr);
return arr;
}
同理小顶堆的代码:
var len; //全局的len,控制大顶堆的长度,实现在原数组上的调整
function swap(arr, i, j) {
const temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
function heapSort(arr) {
//通用方法
function minHeapify(arr, i) { //调整以i为根的树为大顶堆,
var left = 2*i+1,
right = 2*i+2,
minest = i; //暂定根节点最大
if (left < len && arr[left] <arr[minest]) {
minest = left;
}
if (right < len && arr[right] <arr[minest]) {
minest = right;
}
if (minest != i) { //当该树不知三个节点的时候,如果做出了调整可能破坏了子的大顶堆,需要条件递归
swap(arr, i, minest); //交换最大的为父节点
minHeapify(arr, minest); //交换后,原值arr[i](往下降了)(索引保存为largest)
//作为根时,子节点可能比它大,因此要继续调整
//往下查看
}
}
//构建大顶堆
function buildMinHeap(arr) { //对每一个节点(非叶节点),做堆调整
len = arr.length;
//从最后一个有子节点开始,构建是自底向上的
for (var i = Math.floor(len/2)-1; i>=0; i--) {
minHeapify(arr, i);
}
}
//输出顺序,并不断维持大顶堆
function orderQ(arr) {
//把最大的数放到最后,然后全局len--=》让大顶堆减少一个数,再调整维持大顶堆
for (var i = arr.length-1; i > 0; i--) {
swap(arr, 0, i);
len--;
minHeapify(arr, 0);
}
}
buildMinHeap(arr);
orderQ(arr);
return arr;
}
新安400电话申请开通【新安企业网站建设】新安微信公众号小程序开发运营价格、新安微信公众号APP软件客户端设计运营、新安网页页面设计公司费用、新安公司网站制作方案流程改版维护大概需要多少钱
备案号: 苏ICP备11067224号
CopyRight © 2011 书生商友信息科技 All Right Reserved
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: https://www.768800.com 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 昌平殡葬| 朝阳殡葬|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
服务热线:400-111-6878