选择式排序主要有两种:选择式排序和堆排序
一 选择式排序
package sort;
/**
* 选择排序
* @author myjava_024
*/
public class SelectSort {
public static int [] a = {10,32,1,9,5,7,12,0,4,3}; // 预设数据数组
public static void main (String args[])
{
int i; // 循环计数变量
int Index = a.length;// 数据索引变量
System.out.print("排序前 : ");
for ( i=0 ; i<Index-1 ; i++ )
System.out.print(" "+a[i]+" ");
System.out.println("");
SelectSort(Index-1); // 选择排序
// 排序后结果
System.out.print("排序后: ");
for ( i=0 ; i<Index-1 ; i++ )
System.out.print(" "+a[i]+" ");
System.out.println("");
}
public static void SelectSort(int Index)
{
int i,j,k; // 循环计数变量
int MinValue; // 最小值变量
int IndexMin; // 最小值索引变量
int Temp; // 暂存变量
for ( i=0 ; i < Index-1; i++ )
{
MinValue = 32767; // 目前最小数值
IndexMin = 0; // 储存最小数值的索引值
for ( j = i ; j < Index ; j++ )
{
if ( a[j] < MinValue ) // 找到最小值
{
MinValue = a[j]; // 储存最小值
IndexMin = j;
}
Temp = a[i]; // 交换两数值
a[i] = a[IndexMin];
a[IndexMin] = Temp;
}
System.out.print("目前排序结果 : ");
for (k=0;k<Index;k++)
System.out.print(" "+a[k]+" ");
System.out.println("");
}
}
}
二 堆排序
package sort;
/**
* 堆排序
* @author myjava_024
*/
public class HeapSort {
public static int[] Heap = {10,32,1,9,5,7,12,0,4,3}; // 预设数据数组
public static void main (String args[])
{
int i; // 循环计数变量
int Index = Heap.length; // 数据索引变量
System.out.print("排序前 : ");
for ( i=1 ; i<Index-1 ; i++ )
System.out.print(" "+Heap[i]+" ");
System.out.println("");
HeapSort(Index-2); // 堆排序
System.out.print("排序后 : ");
for ( i=1 ; i<Index-1 ; i++ )
System.out.print(" "+Heap[i]+" ");
System.out.println("");
}
/**
* 建立堆
*/
public static void CreateHeap(int Root,int Index)
{
int i,j; // 循环计数变量
int Temp; // 暂存变量
int Finish; // 判断堆是否建立完成
j = 2 * Root; // 子节点的Index
Temp = Heap[Root]; // 暂存Heap的Root 值
Finish = 0; // 预设堆建立尚未完成
while ( j <= Index && Finish == 0 )
{
if ( j < Index ) // 找最大的子节点
if ( Heap[j] < Heap[j+1] )
j++;
if ( Temp >= Heap[j] )
Finish=1; // 堆建立完成
else
{
Heap[j/2] = Heap[j]; // 父节点 = 目前节点
j=2*j;
}
}
Heap[j/2] = Temp; // 父节点 = Root值
}
public static void HeapSort(int Index)
{
int i, j, Temp;
// 将二叉树转成Heap
for ( i= (Index/2) ; i >= 1 ; i-- )
CreateHeap(i,Index);
// 开始进行堆排序
for ( i = Index-1; i >= 1; i--)
{
Temp = Heap[i+1]; // Heap的Root值和最后一个值交换
Heap[i+1] = Heap[1];
Heap[1] = Temp;
CreateHeap(1,i); // 对其余数值重建堆
System.out.print("堆的处理过程 : ");
for ( j=1 ; j <= Index; j++ )
System.out.print(" "+Heap[j]+" ");
System.out.println("");
}
}
}