知道了快排的算法之后,就泄露一个程序(js)
代码如下
function searchDeep(arr){
var j=arr.length-1;
var i=1,exchange=0;
var len=arr.length;
var temp=a[0],temp1;
var b=[len];
var tag=0;
for(var i=0; i<len; i++)//init mark array b b[i]=0 说明该位未确定 ;b[i]=1说明该位已确定
b[i]=0;
function loop(i,j){
do{
while(a[j]>temp)
j--;
while(a[++i]<temp&&i<j){}
if(i==j) break;
temp1=a[i];a[i]=a[j];a[j]=temp1;
j--;
if(i==j) break;
}while(i+1!==j)
temp1=temp;temp=a[i];a[i]=temp1;b[i]=1;
}}
while(1){
for(var k=0;k<len,k++){
if(b[k]==0){
i=key;
tag=1;
continue;
}
if( ( (k==len-1) || b[k]==1 ) && tag ){
if(k==len-1) j=k;
ele j=k-1;
tag=0;
break;
}
}
if(i==j) b[i]=1;
else { temp=a[i];
loop(i,j);
}
if(k==len) break;
}
}
我先用b[i]=0来标记还未排序的位,一旦排好则置它为1。对比标准算法,错误原因分析。当时写的时候有想用到递归来做,可是硬是没有把它分析出来,感觉子问题就是和原问题不一致,现在看着标准程序走了一便,发现确实是递归啊,分析下,(设为total)先是ij从两边开始,直到ij相等(这也是我饿自己写的程序自己给自己增加了复杂度i+1!=j,下一次一定注意!) 则将标准比较值赋给该元素完成一轮,下一步是分别对左边(设为l)和右边(设为r)执行相同操作,在左边的时候依然会出现一个情况 i==j,此时又分为左边和右边 右边也一样的情况,
如图所示
则这就是一个递归 只是在一个函数中要调用两次
上标准算法
#include<stdio.h>
int a[101],n,temp1;
void quicksort(int left,int right)
{
int i,j,t,temp;
temp=a[left];
i=left;
j=right;
if(i>=j)//当有一个或无元素时返回递归
return;
do{
while(a[j]>temp&&i<j)//向左寻找较小的
j--;
while(a[i]<temp&&i<j)//向右寻找较大的
i++;
temp1=a[i];a[i]=a[j];a[j]=temp1;
}while(i!==j)
//当i=j时跳出循环说明碰头了将基准值放在这里
temp1=temp;temp=a[i];a[i]=temp1;
quicksort(left,i-1);//处理右边
quicksort(i+1,right)//处理左边
}
}
为何先是右边的往左查找 避免一种情况 6 3 8 9 10 11 i指着3(刚进行过交换 3和11) j指着11 若左边先往右边查找,则会直接到11停止此时跳出内循环将11 与6交换 出问题了
- 大小: 1.9 KB
分享到:
相关推荐
本资源包共20多个文档资料,从搜索引擎工作原理解读,到百度算法深刻解析,seo排名算法深度解读,再到大站站内外优化指导思路,包括快排。刷下拉框等操作解读。 思路清晰条理有据,深刻解读百度seo排名算法,对于...
标题“比快排还快的排序算法”明确指出该算法相较于快速排序(简称快排)有更快的运行速度。在实际应用中,排序算法的选择往往基于其性能表现,特别是在大数据量的情况下。 #### 描述解析: 描述提到作者已经通过...
### 算法解析ACM #### 程序=算法+数据结构 在计算机科学领域,一个程序的成功很大程度上取决于其背后的算法和所采用的数据结构。算法是解决问题的一系列步骤,而数据结构则是组织、管理和存储数据的有效方式。二者...
**文件结构解析** 压缩包内的文件结构可能如下: - `[Content_Types].xml`:定义了压缩包内各种文件类型的默认打开方式。 - `docProps`:存储文档属性,如作者、创建日期等信息。 - `word`:包含实验报告的主文件...
非随机快排作为一种特定的快速排序实现,通过确定性地选择基准值简化了算法的实现,但牺牲了一定的灵活性。通过对上述C++代码的分析,我们不仅理解了非随机快排的工作原理,还了解了其适用场景和潜在局限性。
Python 百度快排脚本是一种利用编程技术优化网站在百度搜索引擎中排名的工具。它主要基于搜索引擎的排名算法,通过模拟用户行为、增加网站流量和互动性来提升网站在搜索结果中的位置。这里我们将深入探讨这个脚本...
### 快排排序C++ #### 简介 快速排序是一种高效的排序算法,采用分治策略来把一个序列分为较小的两个子序列。快速排序在实际应用中非常广泛,其平均时间复杂度为O(n log n),最坏情况下为O(n²),但由于最坏情况较...
快排算法(Quick Sort)是一种高效的排序算法,由C.A.R. Hoare在1960年提出。它采用分治策略,通过选择一个基准元素,将待排序的序列分为两部分,一部分所有元素都小于基准,另一部分所有元素都大于基准,然后对这两...
vue中常用的算法使用例子理解原理,包括标准快排;二叉树diff算法;二叉树比较;二叉树遍历;二维数据;广度优先搜索;还原二叉树;空间复杂度;快速排序;链表逆置;冒泡排序;深度优先搜索;时间复杂度;数据结构...
1.提取出某日访问百度次数最多的那个IP 2.有一个1G大小的一个文件,里面每一行是...5.腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中? ......
### 数学建模十大算法之分治算法:深入解析与应用 #### 分治算法概览 在数学建模与计算机科学领域,分治算法(Divide and Conquer)是一种核心的解决问题策略,广泛应用于各种复杂问题的求解过程中。其基本思想是...
抢占式进程调度算法代码解析 抢占式进程调度算法是一种常用的进程调度算法,旨在提高系统的吞吐率和响应时间。该算法的核心思想是在当前执行的进程中,检查是否有新的进程到达,如果有,则强行抢占当前进程的执行权...
### qsort快排函数源代码解析 #### 一、引言 `qsort`是C语言标准库中的一个强大而灵活的排序函数,用于对数组进行排序。它使用了快速排序算法作为其内部实现,因此被称为“快速排序”或简称“快排”。本文将详细...
《基于遗传算法的智能排课系统深度解析》 在当今教育信息化快速发展的时代,智能排课系统已经成为各大教育机构优化教学资源、提升管理效率的重要工具。本文将深入探讨一种利用遗传算法实现的智能排课系统,揭示其...
本资料详细解析了各种常见编程语言如何有效地支持和实现不同的算法,帮助读者理解语言特性和算法设计之间的相互作用。 一、算法基础 算法是计算机科学的灵魂,它是一系列明确的步骤,用于解决特定问题或执行特定...
6. **智能算法**:现代电压力锅往往具有智能烹饪模式,通过学习和优化算法,可以根据不同食材和菜式自动调整烹饪时间和排气策略,提升烹饪效果。 综上所述,电压力锅的快速排气控制方法是电压力锅设计中的核心技术...
8. **快排优化**:三向切分快排能处理大量重复元素的情况,避免过多的递归。当子问题规模较小,可用插入排序替代递归。 9. **链表反转**:通过三个指针,分别指向当前节点、前一个节点和下一个节点,迭代完成链表...
### 经典的快排代码C语言不下别后悔! #### 快速排序算法介绍 快速排序(Quick Sort)是一种非常高效的排序算法,采用分治法(Divide and Conquer)策略来把一个序列分为较小和较大的两个子序列,然后递归地排序两...
以下是对这些算法的详细解析: 1. **排序算法**: - 冒泡排序:通过重复遍历待排序数组,比较并交换相邻元素,直到没有任何一对数字需要交换。 - 选择排序:每次从未排序部分找到最小(或最大)元素,放到已排序...