System.out.print("After Sort:");
for(int j=1;jsorted.length;j++){
System.out.print((int)sorted[j]+" ");
}
System.out.println();
}
}
面试穿什么,这里找答案!
7)归并排序:
将两个或两个以上的有序表组合成一个新的有序表 。归并排序要使用一个辅助数组,大小跟原数组相同,递归做法 。每次将目标序列分解成两个序列,分别排序两个子序列之后 , 再将两个排序好的子序列merge到一起 。
归并排序Java代码:
public class MergeSort {
private double[] bridge;//辅助数组
public void sort(double[] obj){
if (obj == null){
throw new NullPointerException("
The param can not be null!");
}
bridge = new double[obj.length]; // 初始化中间数组
mergeSort(obj, 0, obj.length - 1); // 归并排序
bridge = null;
}
private void mergeSort(double[] obj, int left, int right){
if (leftright){
int center = (left + right) / 2;
mergeSort(obj, left, center);
mergeSort(obj, center + 1, right);
merge(obj, left, center, right);
}
}
private void merge(double[] obj, int left,
int center, int right){
int mid = center + 1;
int third = left;
int tmp = left;
while (left = centermid = right){
// 从两个数组中取出小的放入中间数组
if (obj[left]-obj[mid]=10e-6){
bridge[third++] = obj[left++];
} else{
bridge[third++] = obj[mid++];
}
}
// 剩余部分依次置入中间数组
while (mid = right){
bridge[third++] = obj[mid++];
}
while (left = center){
bridge[third++] = obj[left++];
}
// 将中间数组的内容拷贝回原数组
copy(obj, tmp, right);
}
private void copy(double[] obj, int left, int right)
{
while (left = right){
obj[left] = bridge[left];
left++;
}
}
public static void main(String[] args) {
Random random = new Random(6);
int arraysize = 10;
double[] sorted = new double[arraysize];
System.out.print("Before Sort:");
for (int j = 0; jarraysize; j++) {
sorted[j] = (int) (random.nextDouble() * 100);
System.out.print((int) sorted[j] + " ");
}
System.out.println();
MergeSort sorter = new MergeSort();
sorter.sort(sorted);
System.out.print("After Sort:");
for (int j = 0; jsorted.length; j++) {
System.out.print((int) sorted[j] + " ");
}
System.out.println();
}
}
面试穿什么,这里找答案!
8)基数排序:
使用10个辅助队列,假设最大数的数字位数为 x,则一共做 x次,从个位数开始往前,以第i位数字的大小为依据,将数据放进辅助队列,搞定之后回收 。下次再以高一位开始的数字位为依据 。
以Vector作辅助队列,基数排序的Java代码:
public class RadixSort {
private int keyNum=-1;
private VectorVectorDouble util;
public void distribute(double [] sorted, int nth){
if(nth=keyNumnth0){
util=new VectorVectorDouble();
for(int j=0;j10;j++){
Vector Double temp= new Vector Double();
util.add(temp);
}
for(int j=0;jsorted.length;j++){
int index= getNthDigit(sorted[j],nth);
util.get(index).add(sorted[j]);
}
}
}
public int getNthDigit(double num,int nth){
String nn= Integer.toString((int)num);
int len= nn.length();
if(len=nth){
return Character.getNumericValue(nn.charAt(len-nth));
}else{
return 0;
}
}
public void collect(double [] sorted){
int k=0;
for(int j=0;j10;j++){
int len= util.get(j).size();
if(len0){
for(int i=0;ilen;i++){
sorted[k++]= util.get(j).get(i);
推荐阅读
- canvas游戏开发思维,canvas做游戏
- 抖音手机壁纸怎么去除字,苹果手机抖音没有动态壁纸选项
- apex竞速游戏怎么开启,apex怎么开启帧数
- js对象数组去重,js数组中的对象去重合并
- mysql表误删怎么办 mysql不小心删除了表
- chatgpt无效的url,chatGPT授权码无效
- asp.net获取当前窗口,aspnet弹出窗口选择
- 蓬安天然气关注公众号,蓬安天然气电话
- php列出数据库中图片 php读取图片并输出