专栏名称: java那些事
分享java开发中常用的技术,分享软件开发中各种新技术的应用方法。每天推送java技术相关或者互联网相关文章。关注“java那些事”,让自己做一个潮流的java技术人!《java程序员由笨鸟到菜鸟》系列文章火热更新中。
目录
相关文章推荐
芋道源码  ·  Spring Boot 中使用 JSON ... ·  昨天  
芋道源码  ·  高性能、无侵入的 Java 性能监控神器 ·  昨天  
芋道源码  ·  Java面试,问八股文的面试官水平很次? ·  昨天  
Java编程精选  ·  手把手教你Java文件断点下载 ·  2 天前  
芋道源码  ·  if 判断泛滥?试一试规则执行器,太香了! ·  2 天前  
51好读  ›  专栏  ›  java那些事

一遍记住Java常用的八种排序算法与代码实现

java那些事  · 公众号  · Java  · 2018-12-26 16:00

正文

请到「今天看啥」查看全文


(; j >= 0 && temp //从后往前遍历。
a[j + d] = a[j]; //向后移动d位
}
a[j + d] = temp;
}
}
}
}



3.简单选择排序


常用于取序列中最大最小的几个数时。


(如果每次比较都交换,那么就是交换排序;如果每次比较完一个循环再交换,就是简单选择排序。)


1.遍历整个序列,将最小的数放在最前面。


2.遍历剩下的序列,将最小的数放在最前面。


3.重复第二步,直到只剩下一个数。



如何写成代码:


1.首先确定循环次数,并且记住当前数字和当前位置。


2.将当前位置后面所有的数与当前数字进行对比,小数赋值给key,并记住小数的位置。


3.比对完成后,将最小的值与第一个数的值交换。


4.重复2、3步。


代码实现如下:



public void selectSort ( int [] a) {
int length = a.length;
for ( int i = 0 ; i //循环次数
int key = a[i];
int position=i;
for ( int j = i + 1 ; j //选出最小的值和位置
if (a[j]                     key = a[j];
position = j;
}
}
a[position]=a[i]; //交换位置
a[i]=key;
}
}



4.堆排序


对简单选择排序的优化。


1.将序列构建成大顶堆。


2.将根节点与最后一个节点交换,然后断开最后一个节点。


3.重复第一、二步,直到所有节点断开。



代码实现如下:



public void heapSort ( int [] a ) {
System. out .println( "开始排序" );
int arrayLength=a.length;
//循环建堆
for ( int i= 0 ;i -1;i++){
//建堆

buildMaxHeap(a,arrayLength -1 -i);
//交换堆顶和最后一个元素
swap(a, 0 ,arrayLength -1 -i);
System. out .println(Arrays.toString(a));
}
}
private void swap ( int [] data, int i, int j ) {
// TODO Auto-generated method stub
int tmp=data[i];
data[i]=data[j];
data[j]=tmp;
}
//对data数组从0到lastIndex建大顶堆
private






请到「今天看啥」查看全文