本文主要是介绍数据结构与算法-(选择排序)排序算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
数据结构与算法-(选择排序)排序算法
选择排序中第一种是简单选择排序
package suanfa;
public class MySort {
private void swap(int[] data,int m,int n){
int temp=data[m];
data[m]=data[n];
data[n]=temp;
}
public void selectSort(int[] data){
for(int i=0;i<data.length;i++){
int max=0;
for(int j=0;j<data.length-i;j++){
if(data[j]>data[max]){
max=j;
}
}
swap(data,max,data.length-1-i);
}
}
public static void main(String[] args){
int[] data=new int[]{9,8,7,65,4,3,32,223,1};
MySort mySort=new MySort();
mySort.selectSort(data);
for(int value:data){
System.out.println(value);
}
}
}
选择排序的第二种是堆排序,在二叉树中有两种堆,一种是头节点大于左右子节点(大顶堆),一种是头节点小于左右子节点(小顶堆)
package suanfa;
public class MySort {
private void swap(int[] data,int m,int n){
int temp=data[m];
data[m]=data[n];
data[n]=temp;
}
public void heapSort(int[] data){
buildHeap(data,data.length);
for(int i=0;i<data.length;i++){
swap(data,0,data.length-1-i);
buildHeap(data,data.length-i-1);
}
}
private void buildHeap(int[] data,int len){
for(int i=len/2;i>=0;i--){
adjust(data,i,len);
}
}
private void adjust(int[] data,int i,int len){
int left=i*2+1;
int right=left+1;
int max=i;
if(left<len&&data[max]<data[left]){
max=left;
}
if(right<len&&data[max]<data[right]){
max=right;
}
swap(data,max,i);
}
public static void main(String[] args){
int[] data=new int[]{9,8,7,65,4,3,32,223,1};
MySort mySort=new MySort();
mySort.heapSort(data);
for(int value:data){
System.out.println(value);
}
}
}
这篇关于数据结构与算法-(选择排序)排序算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!