java数据结构之插入排序(选择排序(直接选择排序、堆排序))
来源:互联网 发布:温州python培训班 编辑:程序博客网 时间:2024/06/07 00:58
1选择排序
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
// 选择排序
publicstaticvoid selectSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
{
int idx = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[idx]) {
idx = j;
}
}
if (i != idx) {
int tmp = arr[i];
arr[i] = arr[idx];
arr[idx] = tmp;
}
}
}
}
2.堆排序
//堆排序注意:
//仅用于排序话,没有必要建立MaxHeap的类,借用其思想即可,没必要建立哨兵在index=0处
rootIndex的左子节点为2*rootdex+1,右子节点2*rootdex+2,因为最顶上的根节点index=0
//arr.length就是节点长度
//而lastIndex=arr。length-1
public staticvoid main(String[] args) {
int []arr=newint[]{1,2,5,4,6,7,12,10}; //lastIndex=8-1=7
heapSort(arr);
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
publicstaticvoid heapSort(int[] arr) {
for (int i=( arr.length/2-1);i>=0; i--) {
reheap(arr,i,arr.length-1);
}
int tmp=arr[arr.length-1]; //交换,把最大的12放到最后
arr[arr.length-1]=arr[0];
arr[0]=tmp;
for (int j=( arr.length-2);j>0; j--) { //在剩余的数据中重复上面过程,最大的往后放
reheap(arr,0,j);
tmp=arr[j];
arr[j]=arr[0];
arr[0]=tmp;
}
}
publicstaticvoid reheap(int[] arr,int rootIndex,int lastIndex)
{boolean done=false;
int orphan=arr[rootIndex];
int largeChild=rootIndex*2+1;
int leftChild=0;
int rightChild=0;
while (!done&&largeChild<=lastIndex) {
leftChild=largeChild;
rightChild=leftChild+1;
if(rightChild<lastIndex&&arr[rightChild]>arr[largeChild]){ //arr.length-1就是lastIndex
largeChild=rightChild;
}
if(orphan<arr[largeChild])
{
arr[rootIndex]=arr[largeChild];
rootIndex=largeChild;
largeChild=rootIndex*2+1;
}
else
done=true;
}
arr[rootIndex]=orphan;
for(int m=0;m<arr.length;m++){
System.out.print(arr[m]+",");
}
System.out.println("");
}
显示:
1,2,5,10,6,7,12,4,
1,2,12,10,6,7,5,4,
1,10,12,4,6,7,5,2,
12,10,7,4,6,1,5,2, //第一次重建堆
10,6,7,4,2,1,5,12, //取12放到最后
7,6,5,4,2,1,10,12, //取10放到最后
6,4,5,1,2,7,10,12,
5,4,2,1,6,7,10,12,
4,1,2,5,6,7,10,12,
2,1,4,5,6,7,10,12,
1
2
4
5
6
7
10
12
- java数据结构之插入排序(选择排序(直接选择排序、堆排序))
- Java基础篇之----排序(快速排序、冒泡排序、堆排序、简单选择排序、 希尔排序、直接插入排序)
- 数据结构 JAVA描述(十一) 选择排序(直接选择排序,树形选择排序,堆排序)
- java实现各种基础排序(冒泡排序、快速排序、直接选择排序、堆排序、直接插入排序、归并排序)
- 数据结构之排序算法(五)-直接插入排序,希尔排序,直接选择排序
- 选择排序(直接选择、堆排序)
- 选择排序(直接选择、堆排序)
- 排序:选择排序(直接选择排序、堆排序)
- 【排序】选择排序(直接选择排序、堆排序)
- 经典算法之选择排序(直接选择、堆排序)
- 冒泡排序、选择排序、直接插入排序(java实现)
- 数据结构与算法:七种排序算法总结(冒泡排序、选择排序、直接插入排序、希尔排序、堆排序、归并排序、快速排序)
- 排序算法之冒泡排序、选择排序、直接插入排序(java实现)
- 算法分析-选择排序(直接选择排序 & 堆排序)
- 算法-排序-选择排序(直接选择和堆排序)
- 2.选择排序(直接选择排序和堆排序)
- 选择排序 (直接选择排序 ,堆排序)
- 选择排序(直接选择排序、堆排序)
- 做辅助的基础知识
- android图形化编程_计算BMI值
- GetDIBits 遍历位图 获取像素的颜色值(RGB)
- Linux设备驱动程序学习(15)
- 程序数据集传参使用解决方案
- java数据结构之插入排序(选择排序(直接选择排序、堆排序))
- Linux设备驱动程序学习(16)
- 采集视频,并在PC上显示出采集到的视频的程序
- Linux设备驱动程序学习(17)
- 一个比较好用的PHP文件上传类
- 什么是Base64以及sun.misc.BASE64Decoder的用法
- 关于f1技术
- Linux设备驱动程序学习(18)
- QT学习笔记(1): Qt的线程安全和可重用性