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

 

 

原创粉丝点击