java 快排和堆排序
2014-06-10 16:59
162 查看
1. 这段时间准备找工作了,所以就从最简单的排序开始看看(以下是java实现的快速排序和堆排序):
注:快排和堆排序都是根据二叉树的原理来加快排序速度的。。。
快排:
堆排序
public static void initHeap(int[] value){
for(int i=(value.length-1)/2; i>=0; i--){
changeSmallHeap(value, i, value.length);
}
}
public static void heapSort(int[] value){
initHeap(value);
for(int i=value.length-1; i>=1; i--){
int b = value[0];
value[0] = value[i];
value[i] = b;
changeSmallHeap(value, 0, i-1);
}
}
public static void changeBigHeap(int[] value,int start,int end){
int temp = value[start];
int i = start,j = start*2;
boolean finished = false;
while(j <= end && !finished){
if(j<end && value[j]<value[j+1]){ //j<en 表示还有又子树,所以value[j+1]成立,这里的j<end采用短路运算
j = j+1;
}
if(temp >= value[j]){
finished = true;
}else{
value[i] = value[j];
i = j;
j = i*2; //继续筛选他的子树
}
}
value[i] = temp;
}
public static void changeSmallHeap(int[] value,int start,int end){
int temp = value[start];
int i = start,j = start*2;
boolean finished = false;
while(j <= end && !finished){
if(j<end && value[j]>value[j+1]){ //j<en 表示还有又子树,所以value[j+1]成立,这里的j<end采用短路运算
j = j+1;
}
if(temp <= value[j]){
finished = true;
}else{
value[i] = value[j];
i = j;
j = i*2; //继续筛选他的子树
}
}
value[i] = temp;
}
private static void show(int[] value) {
for(int i : value){
System.out.print(i+",");
}
}
public static void main(String[] args) {
int[] sort = {5,33,1,7,9,888,25,234321,4325,54,4234,7876};
heapSort(sort);
show(sort);
}
注:快排和堆排序都是根据二叉树的原理来加快排序速度的。。。
快排:
public static void initSort(int[] value){ //初始化排序 quickSort(value,0,value.length-1); show(value); } private static void show(int[] value) { for(int i : value){ System.out.print(i+","); } } public static void quickSort(int[] value,int low,int high){ if(low < high){ int group = groupSort(value,low,high); quickSort(value, low, group-1); quickSort(value, group+1, high); } } private static int groupSort(int[] value, int left, int right) { int x = value[left]; int low = left,high = right; while(low < high){ while(low<high && value[high]>=x){ high--; } if(low<high){ value[low] = value[high]; low++; } while(low<high && value[low]<=x){ low++; } if(low<high){ value[high] = value[low]; high--; } } value[low] = x; return low; } public static void main(String[] args) { int[] sort = {5,33,1,7,9,888,25,234321,4325,54,4234,7876}; initSort(sort); }
堆排序
public static void initHeap(int[] value){
for(int i=(value.length-1)/2; i>=0; i--){
changeSmallHeap(value, i, value.length);
}
}
public static void heapSort(int[] value){
initHeap(value);
for(int i=value.length-1; i>=1; i--){
int b = value[0];
value[0] = value[i];
value[i] = b;
changeSmallHeap(value, 0, i-1);
}
}
public static void changeBigHeap(int[] value,int start,int end){
int temp = value[start];
int i = start,j = start*2;
boolean finished = false;
while(j <= end && !finished){
if(j<end && value[j]<value[j+1]){ //j<en 表示还有又子树,所以value[j+1]成立,这里的j<end采用短路运算
j = j+1;
}
if(temp >= value[j]){
finished = true;
}else{
value[i] = value[j];
i = j;
j = i*2; //继续筛选他的子树
}
}
value[i] = temp;
}
public static void changeSmallHeap(int[] value,int start,int end){
int temp = value[start];
int i = start,j = start*2;
boolean finished = false;
while(j <= end && !finished){
if(j<end && value[j]>value[j+1]){ //j<en 表示还有又子树,所以value[j+1]成立,这里的j<end采用短路运算
j = j+1;
}
if(temp <= value[j]){
finished = true;
}else{
value[i] = value[j];
i = j;
j = i*2; //继续筛选他的子树
}
}
value[i] = temp;
}
private static void show(int[] value) {
for(int i : value){
System.out.print(i+",");
}
}
public static void main(String[] args) {
int[] sort = {5,33,1,7,9,888,25,234321,4325,54,4234,7876};
heapSort(sort);
show(sort);
}
相关文章推荐
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- java 实现堆排序
- 堆排序Java实现
- 堆排序(JAVA)
- 基本算法-堆排序及其Java实现
- 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)
- java 堆排序
- 堆排序(java实现)
- 堆排序(java)
- 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
- Java实现快速排序、归并排序、堆排序
- 算法导论Java实现-堆排序(6.4章节)
- Java排序算法(三):堆排序
- 排序算法复习(Java实现):插入,冒泡,选择,Shell,快速排序, 归并排序,堆排序,桶式排序,基数排序
- JAVA 堆排序
- 《算法导论的Java实现》 7 堆排序
- 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)
- [原]堆排序的java实现
- Java排序算法 堆排序