搜索

耀世资讯

公司动态
行业新闻

联系我们

Contact us

电话:400-123-4567
Q Q:1234567890
邮箱:admin@youweb.com
地址:广东省广州市天河区88号

排序算法进阶--排序算法优化

发布时间:2024-04-29 04:17:34 作者:佚名
 1 //找基准
 2 public static int partion(int[] array,int low,int high){//一次快排
 3     int tmp=array[low];
 4     while(low < high){
 5 //从后找
 6         while(low < high && array[high] >= tmp){
 7             --high;
 8         }
 9         if(low >= high){
10             break;
11         }else{
12             array[low]= array[high];
13         }
14 //从前找
15         while(low < high && array[low] <= tmp){
16             ++low;
17         }
18         if(low >= high){
19             break;
20         }else{
21             array[high]=array[low];
22         }
23     }
24     array[low]= tmp;
25     return low;
26 }
27 //将相同元素聚集在一起
28 public static int[] focusNum(int[] array,int start,int end,int par){
29     int tmp=0;
30 //查找范围
31     int left=par-1;
32     int right=par+1;
33 //交换的指引变量
34     int parLeft=par-1;
35     int parRight=par+1;
36 //左边找
37     for(int i=left;i >=start;i--){
38         if(array[i]==array[par]){//遍历过程中,有与par相同的元素时
39             if(i !=parLeft){//若i 和parLeft相同,将两下标所对应的元素交换
40                 tmp= array[i];
41                 array[i]= array[parLeft];
42                 array[parLeft]= tmp;
43                 parLeft--;
44             }else{
45                 parLeft--;
46             }
47         }
48     }
49 //右边找
50     for(int j=right;j <=end;j++){//遍历过程中,有与par相同的元素时
51         if(array[j]==array[par]){//若i 和parRight相同,将两下标所对应的元素交换
52             if(j != parRight){
53                 tmp= array[j];
54                 array[j]= array[parRight];
55                 array[parRight]= tmp;
56                 parRight++;
57             }else{
58                 parRight++;
59             }
60         }
61     }
62     int[] focus={parLeft,parRight};
63     return focus;
64 }
65 //基准左右进行递归排序
66 public static void Quick(int[] array,int start,int end){
67     int par= partion(array,start,end);
68     int[] brray=focusNum(array,start,end,par);//相同元素聚集在一起后,新的left和right
69     int left=brray[0];
70     int right=brray[1];
71     if(par > start+1){
72         Quick(array,start,left);
73     }
74     if(par < end-1){
75         Quick(array,right,end);
76     }
77 }
热线电话:400-123-4567
电子邮箱:admin@youweb.com
Q Q:1234567890
地址:广东省广州市天河区88号
备案号:
耀世娱乐-耀世平台-耀世加盟站

关注我们

Copyright © 2002-2017 耀世-耀世平台-耀世加盟站 版权所有

平台注册入口