堆排序,选择排序,冒泡排序的三种排序
package experiment;
import java.util.Arrays;
import java.util.Scanner;
public class experiment_02 {
//堆排序
//使堆母结点大于两个子节点
public static void heapify(int a[],int n,int i) {
int c1 = 2 * i + 1;//子节点1
int c2 = 2 * i + 2;//子节点2
int max = i;
//比较母结点与两个子节点的大小
if(c1 < n && a[c1] > a[max]) {
max = i;
}
if(c2 < n && a[c2] > a[max]) {
max = i;
}
if(max!=i) {
//若max改变进行交换
swap(a,max,i);
//对其子节点继续进行 使母结点大于两个子节点 递归试其最终整个堆符合
heapify(a,n,max);
}
}
//建堆
public static void heap_build(int[] a,int n) {
int last_node = n-1;
int parent = (last_node - 1)/2;
int i ;
for(i = parent;i >= 0;i–) {
heapify(a,n,i);
}
}
//进行堆排序
public static void heap(int[] a,int n) {
heap_build(a,n);
for(int i = n-1;i >= 0;i–) {
swap(a,i,0);
heapify(a,i,0);
}
System.out.println(“堆排序后为”+Arrays.toString(a));
}
// //冒泡排序(两两进行比较)
// public static void bubble(int a[],int n) {
// for(int j = 0;j < n-1;j++) {
// if(j == (n-1)) {
// break;
// }
// for(int t = 0;t<n-1-j;t++) {
// if(a[t] > a[t+1]) {
// int temp = a[t];
// a[t] = a[t+1];
// a[t+1] = temp;
// }
//
// }
// }
// System.out.println(“冒泡排序后为”+Arrays.toString(a));
// }
//// 选择排序(从无序数组中选出最小元素 然后不断循环)
// public static void select(int[] a,int n) {
// for(int q = 0;q<n-1;q++) {
// int index = q;
// int e;
// for(e = q+1;e<n;e++) {
// if(a[e]<a[index]) {
// index = e;
// }
// }
// int temp = a[index];
// a[index] = a[q];
// a[q] = temp;
// }
// System.out.println(“选择排序后为”+Arrays.toString(a));
// }
public static void swap(int a[],int b,int c) {
int d = a[b];
a[b] = a[c];
a[c] = d;
}
public static void main(String[] args) throws Exception {
System.out.println(“请输入排序总数”);
Scanner s = new Scanner(System.in);
int n = s.nextInt();
int[] a = new int[n];
for(int i = 0;i<n;i++) {
a[i] = s.nextInt();
}
System.out.println(“无序数组为”+Arrays.toString(a));
// bubble(a,n);
// select(a,n);
heap(a,n);
}
}
该博客展示了如何使用Java编程语言实现堆排序算法。代码包括了建立最大堆、堆排序的过程,并提供了完整的堆排序方法。此外,还包含了冒泡排序和选择排序的注释代码,但未在主函数中调用。示例中,用户可以输入数组大小,程序将对输入的无序数组进行堆排序并打印排序结果。
1203

被折叠的 条评论
为什么被折叠?



