应聘中经常考得排序详解

上传人:第*** 文档编号:34073455 上传时间:2018-02-20 格式:DOC 页数:9 大小:131.50KB
返回 下载 相关 举报
应聘中经常考得排序详解_第1页
第1页 / 共9页
应聘中经常考得排序详解_第2页
第2页 / 共9页
应聘中经常考得排序详解_第3页
第3页 / 共9页
应聘中经常考得排序详解_第4页
第4页 / 共9页
应聘中经常考得排序详解_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《应聘中经常考得排序详解》由会员分享,可在线阅读,更多相关《应聘中经常考得排序详解(9页珍藏版)》请在金锄头文库上搜索。

1、/* author Administrator* 冒泡排序的算法* 比较n轮,每一轮都把最大元素移动到数组后端*/public class Maopaosort private static int count = 0;public static void Sort(int a) int temp = 0;int i = 0, j = 0;for (i = 1; i aj + 1) / 这里的“” 号决定了最后是升序,“ 0; j-) if (dataj - 1 dataj) int temp = 0;temp = dataj - 1;dataj - 1 = dataj;dataj = tem

2、p;printAll(data);/ printAll(data);/ 打印结果public static void main(String args) int data = new int10;for (int i = 0; i left & pDataj middle);System.out.println(i + , + j);if (i = j)break;temp = pDatai;pDatai = pDataj;pDataj = temp;pDataleft = pDataj;pDataj = middle;for (k = 0; k i)QuickSort(pData, i, r

3、ight);public static void main(String args) int pData = new int10;for (int i = 0; i =leftIndex)/如果要找的数比midVal大if(midValval)/在arr左边数中找find(leftIndex,midIndex-1,val,arr);else if(midValval)/在arr的右边去查找find(midIndex+1,rightIndex,val,arr);else if(midVal=val)System.out.println(找到下标+midIndex);elseSystem.out.

4、println(没有该数! );public static void main(String args) / int arr=0,1,2,3,4,5,6,7,8;/ int temp=0;/排序/外层循环 ,它决定一共走几趟int arr=new int10;for (int i = 0; i 10; i+) / arri=(int)(Math.random()*10);arri=i*10;/Arrays.sort(arr);for (int i = 0; i arr.length; i+) System.out.print(arri+t);find(0,arr.length-1,900,ar

5、r); /* author lcc* 归并排序(双数组)* 归并排序中的“归并”的意思是将两个或者两个以上的有序表组合成一个新的有序表。他的实现无论是顺序存储结构还是链表结构,都可以在O(m+n)的 时间级上实现。* 复杂度:* 时间复杂度:O(nlogn)* 空间复杂度:O(n)* 在实现单数组的归并排序之前,首先了解一下双数组的归并排序* 这个双数组归并的前提是两个数组a和b 都是已经排序好的*/public class Test1 public static void main(String args) int a=1,2,3,4,6,7,8,10; int b=1,2,5,9; int

6、 c = new inta.length+b.length; mergeSort(a,a.length,b,b.length,c); System.out.println(Arrays.toString(c); public static void mergeSort(int a,int n,int b,int m,int c) int i,j,k; i=j=k=0; /只有满足in&jm才执行,分别扫描两个数组,将数组中的元素进行对比,从小到大赋值给临时数组c while(in&jm) if(aibj) ck+=ai+; else ck+=bj+; /将剩余的a数组的元素放入 c中 whil

7、e(in) ck+=ai+; /将剩余的b数组的元素放入 c中 while(jm) ck+=bj+; /* author lcc* 下面开始实现单数组的归并排序算法* 思想:首先将数组中个单独的一个元素作为一个已经排序好的序列,然后,将两两相邻的元素进行归并排序,依次类推,直到最后归并为一个排序好的序列*/如上图:首先将每个元素作为一个已经排序好的序列,一共 7 个序列然后,将每两个相邻的序列归并为一个序列,如 49 38 归并排序后变成 38 49,依次分成了 4个序列,然后再将之前已经排序好的两个相邻的序列进行排序,变成 2 个序列,每个序列都是排序好的,最后归并为一个排序好的序列publ

8、ic class MergeSort public static void main(String args) int array = 49,38,65,97,76,13,27; System.out.println(Arrays.toString(array); System.out.println(-排序前-); mergeSort(array,0,array.length-1); System.out.println(-排序后-); System.out.println(Arrays.toString(array); /* * 这里依然需要递归来达到数组元素的排序,如果有两个已有元素的数

9、组的话,就不用这么麻烦您了 * 不过这种归并排序依然是效率最好的排序方法之一,而且还是稳定的(相比快速排序,快速排序不稳定) */ public static void mergeSort(int array,int low,int high) if(lowhigh) mergeSort(array,low,(low+high)/2);/左边排序 mergeSort(array,(low+high)/2+1,high);/右边排序 merge(array,low,(high+low)/2,high);/将两个序列归并为一个序列 System.out.println(Arrays.toStrin

10、g(array); public static void merge(int array,int low,int mid,int high) int temp=new inthigh-low+1; int i = low; int j = mid+1; int k=0; /* * 将 array数组分成两个数组来扫描,每一次都会将前后相邻的两个有序的序列归并为一个有序的序列 */ while(i=mid&j=high) if(arrayi=arrayj) tempk+=arrayi+; else tempk+=arrayj+; /下面这两种while循环每次只执行其中一个 /将剩余的arrayi存入temp 中 while(i=mid) tempk+=arrayi+; /将剩余的arrayj存放到temp 中 while(j=high) tempk+=arrayj+; for(int m=0;mtemp.length;m+) arraylow+m=tempm;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号