最近学习的排序算法,内部排序的交换式排序
一 冒泡排序:
package sort;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* 冒泡排序
* @author myjava_024
* 2008.10.29
*/
public class BubbleSort
{
public static void main(String[] args)
{
int [] a = {10,32,1,9,5,7,12,0,4,3};
System.out.print("排序前: ");
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
System.out.println();
BubbleSort test = new BubbleSort();
test.bubbleSort(a);
System.out.println("排序结束");
System.out.print("排序后: ");
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
System.out.println();
}
public void bubbleSort(int [] a )
{
int len = a.length;
System.out.println("数组大小是:" + len);
boolean change = false;
int temp;
int count = 0;
for(int i=len;i>1;i--)
{
for(int j=0;j<i-1;j++)
{
if(a[j+1]<a[j])
{
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
change = true;
count++;
}
}
if(change)
{
System.out.print("第"+count+"趟交换: ");
for(int k=0;k<len;k++)
System.out.print(a[k]+" ");
System.out.println();
}
}
}
private static final Log logger = LogFactory.getLog(BubbleSort.class);
}
二 快速排序
package sort;
/**
* 快速排序
* @author myjava_024
* 2008.10.29
*/
public class QuickSort {
public static int [] a = {10,32,1,9,5,7,12,0,4,3}; // 预设数据数组
public static void main(String args[])
{
System.out.print("排序前: ");
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
System.out.println("");
int Index = a.length;
QuickSort(0, Index - 2, Index - 1); // 快速排序
// 排序后结果
System.out.print("排序后结果 : ");
for (int i = 0; i < Index - 1; i++)
System.out.print(" " + a[i] + " ");
System.out.println("");
}
public static void QuickSort(int Left, int Right, int Index)
{
int i, j, k; // 循环计数变量
int Pivot; // 枢纽变量
int Temp; // 暂存变量
i = Left; // 设定左指针
j = Right + 1; // 设定右指针
Pivot = a[Left]; // 取最左边的元素
if (i < j)
{
do
{
do // 从左往右找比Pivot大的值
{
i++;
}
while (a[i] <= Pivot && i <= Right);
do // 从右往左找比Pivot小的值
{
j--;
}
while (a[j] >= Pivot && j > Left);
if (i < j) // 交换a[i]和a[j]
{
Temp = a[i];
a[i] = a[j];
a[j] = Temp;
}
}
while (i < j);
if (i > j)
{
Temp = a[Left]; // 交换a[Left]和a[j]
a[Left] = a[j];
a[j] = Temp;
// 打印目前排序结果
System.out.print("目前排序状况: ");
for (k = 0; k < Index; k++)
{
System.out.print(" " + a[k] + " ");
}
System.out.println("");
}
QuickSort(Left, j - 1, Index); // 排序左半边
QuickSort(j + 1, Right, Index); // 排序右半边
}
}
}