(3)用java实现
[backcolor=rgb(27, 36, 38) !important][size=1em][backcolor=rgb(67, 90, 95) !important][size=1em]1 [size=1em]2 [size=1em]3 [size=1em]4 [size=1em]5 [size=1em]6 [size=1em]7 [size=1em]8 [size=1em]9 [size=1em]10 [size=1em]11 [size=1em]12 [size=1em]13 [size=1em]14 [size=1em]15 [size=1em]16 [size=1em]17 [size=1em]18 [size=1em]19 [size=1em]20 [size=1em]21 [size=1em]22 [size=1em]23 [size=1em]24 [size=1em]25 [size=1em]26 [size=1em]27 [size=1em]28 [size=1em]29 [size=1em]30 [size=1em]31 [size=1em]32 [size=1em]33 [size=1em]34 [size=1em]35 [size=1em]36 | [size=1em][size=1em]public class quickSort { [size=1em] int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51}; [size=1em]public quickSort(){ [size=1em] quick(a); [size=1em] for(int i=0;i<a.length;i++) [size=1em] System.out.println(a); [size=1em]} [size=1em]public int getMiddle(int[] list, int low, int high) { [size=1em] int tmp = list[low]; //数组的第一个作为中轴 [size=1em] while (low < high) { [size=1em] while (low < high && list[high] >= tmp) { [size=1em] high--; [size=1em] } [size=1em] list[low] = list[high]; //比中轴小的记录移到低端 [size=1em] while (low < high && list[low] <= tmp) { [size=1em] low++; [size=1em] } [size=1em] list[high] = list[low]; //比中轴大的记录移到高端 [size=1em] } [size=1em] list[low] = tmp; //中轴记录到尾 [size=1em] return low; //返回中轴的位置 [size=1em] } [size=1em]public void _quickSort(int[] list, int low, int high) { [size=1em] if (low < high) { [size=1em] int middle = getMiddle(list, low, high); //将list数组进行一分为二 [size=1em] _quickSort(list, low, middle - 1); //对低字表进行递归排序 [size=1em] _quickSort(list, middle + 1, high); //对高字表进行递归排序 [size=1em] } [size=1em] } [size=1em]public void quick(int[] a2) { [size=1em] if (a2.length > 0) { //查看数组是否为空 [size=1em] _quickSort(a2, 0, a2.length - 1); [size=1em] } [size=1em] } [size=1em]} |
7、归并排序
(1)基本排序:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
(2)实例:
(3)用java实现
[size=1em]1 [size=1em]2 [size=1em]3 [size=1em]4 [size=1em]5 [size=1em]6 [size=1em]7 [size=1em]8 [size=1em]9 [size=1em]10 [size=1em]11 [size=1em]12 [size=1em]13 [size=1em]14 [size=1em]15 [size=1em]16 [size=1em]17 [size=1em]18 [size=1em]19 [size=1em]20 [size=1em]21 [size=1em]22 [size=1em]23 [size=1em]24 [size=1em]25 [size=1em]26 [size=1em]27 [size=1em]28 [size=1em]29 [size=1em]30 [size=1em]31 [size=1em]32 [size=1em]33 [size=1em]34 [size=1em]35 [size=1em]36 [size=1em]37 [size=1em]38 [size=1em]39 [size=1em]40 [size=1em]41 [size=1em]42 [size=1em]43 [size=1em]44 [size=1em]45 [size=1em]46 [size=1em]47 [size=1em]48 [size=1em]49 [size=1em]50 [size=1em]51 [size=1em]52 [size=1em]53 [size=1em]54 | [size=1em][size=1em]import java.util.Arrays; [size=1em]public class mergingSort { [size=1em]int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51}; [size=1em]public mergingSort(){ [size=1em] sort(a,0,a.length-1); [size=1em] for(int i=0;i<a.length;i++) [size=1em] System.out.println(a); [size=1em]} [size=1em]public void sort(int[] data, int left, int right) { [size=1em] // TODO Auto-generated method stub [size=1em] if(left<right){ [size=1em] //找出中间索引 [size=1em] int center=(left+right)/2; [size=1em] //对左边数组进行递归 [size=1em] sort(data,left,center); [size=1em] //对右边数组进行递归 [size=1em] sort(data,center+1,right); [size=1em] //合并 [size=1em] merge(data,left,center,right); [size=1em] [size=1em] } [size=1em]} [size=1em]public void merge(int[] data, int left, int center, int right) { [size=1em] // TODO Auto-generated method stub [size=1em] int [] tmpArr=new int[data.length]; [size=1em] int mid=center+1; [size=1em] //third记录中间数组的索引 [size=1em] int third=left; [size=1em] int tmp=left; [size=1em] while(left<=center&&mid<=right){ [size=1em] //从两个数组中取出最小的放入中间数组 [size=1em] if(data[left]<=data[mid]){ [size=1em] tmpArr[third++]=data[left++]; [size=1em] }else{ [size=1em] tmpArr[third++]=data[mid++]; [size=1em] } [size=1em] } [size=1em] //剩余部分依次放入中间数组 [size=1em] while(mid<=right){ [size=1em] tmpArr[third++]=data[mid++]; [size=1em] } [size=1em] while(left<=center){ [size=1em] tmpArr[third++]=data[left++]; [size=1em] } [size=1em] //将中间数组中的内容复制回原数组 [size=1em] while(tmp<=right){ [size=1em] data[tmp]=tmpArr[tmp++]; [size=1em] } [size=1em] System.out.println(Arrays.toString(data)); [size=1em]} [size=1em]} |
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |