选择排序
public int[] selectsort(int[] num,int n){
int i,j,min,temp;
//总共要经过n-1轮比较
for(i=0;i<n-1;i++){
min=i;//每次默认i为最小值下标
//每轮要经过n-i次比较
for(j=i+1;j<n;j++){
if(num[j]<num[min]){
min=j;
}
}
//将找到的最小值和i位置所在的1值进行比较
if(i!=min){
temp=num[i];
num[i]=num[min];
num[min]=temp;
}
}
return num;
}
堆排序
/*堆排序使用数组来进行存储,
* 结点i的父节点为(i-1)/2
* 结点i的左孩子结点为2*i+1;
* 结点i的右孩子结点为2*i+2
* */
public class heapsort {
//堆调整
public static void heapify(int[] arr,int n,int i){
int largest=i;
int lson=i*2+1;
int rson=i*2+2;
if(lson<n && arr[lson]>arr[largest]){
largest=lson;
}
if(rson<n && arr[rson]>arr[largest]){
largest=rson;
}
if(largest!=i){
int temp=arr[i];arr[i]=arr[largest];arr[largest]=temp;
heapify(arr, n, largest);
}
}
public static void heapsort(int[] arr,int n){
//建堆
int i;
for(i=n/2-1;i>0;i--){
heapify(arr, n, i);
}
//对大顶堆进行排序
for(i=n-1;i>0;i--){
int tem=arr[i];arr[i]=arr[0];arr[0]=tem;
heapify(arr, i, 0);
}
}
public static void main(String[] args){
int[] arr={9,8,7,6,5,4,3,2,1};
heapsort(arr,9);
for(int element:arr){
System.out.print(element+" ");
}
}
/*堆排序使用数组来进行存储,
* 结点i的父节点为(i-1)/2
* 结点i的左孩子结点为2*i+1;
* 结点i的右孩子结点为2*i+2
* 升序使用大顶堆
* */
public class heapsort {
//维护堆的性质:进行堆调整:arr存储堆的数组;n数组长度;i维护结点的下标
public static void heapify(int[] arr,int n,int i){
int largest=i;
int lson=i*2+1;
int rson=i*2+2;
//largest是最大值的标识,将父节点,左右孩子结点的最大值下标赋值给largest
if(lson<n && arr[lson]>arr[largest]){
largest=lson;
}
if(rson<n && arr[rson]>arr[largest]){
largest=rson;
}
//将最大值和父节点交换,并对父节点更新后的位置再次进行堆调整
if(largest!=i){
int temp=arr[i];arr[i]=arr[largest];arr[largest]=temp;
heapify(arr, n, largest);
}
}
//建堆的入口
public static void heapsort(int[] arr,int n){
//建堆
//下标为i的结点父节点为(i-1)/2,最后一个拥有孩子结点的父节点为(n-1-1)/2,即n/2-1
//对每一个结点进行heapify
int i;
for(i=n/2-1;i>0;i--){
heapify(arr, n, i);
}
/*建堆之后符合大顶堆的性质,但数组不一定按序从大到小存放
* 因此对堆话数据进行排序
* 每次都是移出最顶层的根节点arr[0],与最尾部结点位置调整,同时遍历长度-1
* 然后重新整理被换到根节点的末尾元素,使其符合堆的特性
* 直到未排序的堆长度为0
*
* */
for(i=n-1;i>0;i--){
int tem=arr[i];arr[i]=arr[0];arr[0]=tem;
heapify(arr, i, 0);
}
}
public static void main(String[] args){
int[] arr={9,8,7,6,5,4,3,2,1};
heapsort(arr,9);
for(int element:arr){
System.out.print(element+" ");
}
}