ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:28.97KB ,
资源ID:6672206      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-6672206.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(排序算法总结Java篇Word格式.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

排序算法总结Java篇Word格式.docx

1、 /执行插入排序 for(i=1;t;i+) for(j=i;j0;j-) if(numjnumj-1) temp = numj; numj = numj-1; numj-1 = temp; else break; System.out.print(第 + (i + 1) + 次排序结果: for(int a = 0; a t; a+) System.out.print(numa + System.out.println( /输出排序结果n排序后:2. 冒泡排序冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过

2、来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3. 针对所有的元素重复以上的步骤,除了最后一个。4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。时间复杂度若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数和记录移动次数均达到最小值:,。所以,冒泡排序最好的时间复杂度

3、为若初始文件是反序的,需要进行趟排序。每趟排序要进行次关键字的比较(1in-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:冒泡排序的最坏时间复杂度为综上,因此冒泡排序总的平均时间复杂度为 稳定性: Java程序代码:/冒泡排序public class BubbleSort public static void main(String args) int t = args.length; int score = new intt; /排序前 for(int i=0; scorei = Integer.parseInt(argsi); System

4、.out.print(scorei + /执行冒泡排序 for (int i = 0; i score.length -1; i+) /最多做n-1趟排序 for(int j = 0 ;j score.length - i - 1; j+) /对当前无序区间score0.length-i-1进行排序(j的范围很关键,这个范围是在逐步缩小的) if(scorej scorej + 1) /把小的值交换到后面 int temp = scorej; scorej = scorej + 1; scorej + 1 = temp; System.out.print( for(int a = 0; sco

5、re.length; System.out.print(scorea + /排序后最终排序结果:3. 选择排序选择排序是这样实现的:1. 设数组内存放了n个待排数字,数组下标从1开始,到n结束。2. 初始化i=13. 从数组的第i个元素开始到第n个元素,寻找最小的元素。4. 将上一步找到的最小元素和第i位元素交换。5. i+,直到i=n1算法结束,否则回到第3步选择排序的平均时间复杂度也是O(n2)的。不稳定。/选择排序public class SelectSort int t,i; /执行排序 Sort(num); /选择排序方法 public static void Sort(int so

6、rt)sort.length; for(int j=i+1;jsortj) int temp; temp=sorti; sorti=sortj; sortj=temp; sort.length; System.out.print(sorta + 4. 快速排序快速排序是所有排序算法中最高效的一种。它采用了分治的思想:先保证列表的前半部分都小于后半部分,然后分别对前半部分和后半部分排序,这样整个列表就有序了。这是一种先进的思想,也是它高效的原因。因为在排序算法中,算法的高效与否与列表中数字间的比较次数有直接的关系,而保证列表的前半部分都小于后半部分就使得前半部分的任何一个数从此以后都不再跟后半部

7、分的数进行比较了,大大减少了数字间不必要的比较。但查找数据得另当别论了。O(n log n)。/快速排序public class QSort /* * param args */ public static void main(String args) / TODO 自动生成方法存根 quicksort qs = new quicksort(); int data = 3,1,4,6,5,2; qs.data = data; qs.sort(0, qs.data.length-1); qs.display();class quicksort public int data; private i

8、nt partition(int sortArray,int low,int hight) int key = sortArraylow; while(low=key) hight-; sortArraylow = sortArrayhight; sortArraylow low+; sortArrayhight = sortArraylow; sortArraylow = key; return low; public void sort(int low,int hight) if(low=0;i-) maxHeapify(data,data.length,i); *创建最大堆 * *par

9、amdata *paramheapSize需要创建最大堆的大小,一般在sort的时候用到,因为最多值放在末尾,末尾就不再归入最大堆了 *paramindex当前需要创建最大堆的位置 private static void maxHeapify(intdata,int heapSize,int index) /当前点与左右子节点比较 int left=getChildLeftIndex(index); int right=getChildRightIndex(index); int largest=index; if(leftheapSize & dataindexdataleft) large

10、st=left; if(right datalargest1; *左子节点position注意括号,加法优先级更高 private static int getChildLeftIndex(int current) return(current1)+1; *右子节点position private static int getChildRightIndex(int current)1)+2; private static void print(intdata) int pre=-2; if(pre(int)getLog(i+1) pre=(int)getLog(i+1); System.out

11、.println(); System.out.print(datai+| *以2为底的对数 *paramparam private static double getLog(double param) return Math.log(param)/Math.log(2);6. 归并排序归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。例如有两个有序表:(7,10,13,15)和(4,8,1

12、9,20),归并后得到的有序表为:(4,7,8,10,13,15,19,20)。归并过程为:比较ai和aj的大小,若aiaj,则将第一个有序表中的元素ai复制到rk中,并令i和k分别加上1;否则将第二个有序表中的元素aj复制到rk中,并令j和k分别加上1,如此循环下去,直到其中一个有序表取完,然后再将另一个有序表中剩余的元素复制到r中从下标k到下标t的单元。/* *归并排序 */public class MergeSort * *二路归并 *原理:将两个有序表合并和一个有序表/pre *parama *params *第一个有序表的起始下标 *paramm *第二个有序表的起始下标 *para

13、mt *第二个有序表的结束小标 * */ private static void merge(inta,int s,int m,int t) int tmp=new intt-s+1; int i=s,j=m,k=0; while(im & j=t) if(ai=aj) tmpk=ai; k+; i+; else tmpk=aj; j+;m) tmpk=ai; i+; k+; while(j tmpk=aj; j+; System.arraycopy(tmp,0,a,s,tmp.length); *paramlen *每次归并的有序集合的长度 public static void mergeS

14、ort(inta,int s,int len) int size=a.length; int mid=size/(len1); int c=size&(len1)-1); /-归并到只剩一个有序集合的时候结束算法-/ if(mid=0) return; /-进行一趟归并排序-/mid;+i) s=i*2*len; merge(a,s,s+len,(len1)+s-1); /-将剩下的数和倒数一个有序集合归并-/ if(c!=0) merge(a,size-c-2*len,size-c,size-1); /-递归执行下一趟归并排序-/ mergeSort(a,0,2*len); public s

15、tatic void main(String args) inta=new int4,3,6,1,2,5; mergeSort(a,0,1);a.length; System.out.print(ai + 7. 希尔排序希尔排序(Shell Sort)是插入排序的一种。是针对直接插入排序算法的改进。思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2d1重复上述的分组和排序,直至所取的增量=1(d2 0; increment /= 2) for (int i = increment; data.length; i+) temp = datai; fo

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2