您的位置:首页 > 其它

整理了几种常用的排序算法,留着自己看看

2012-08-15 12:05 274 查看
public class Sort {

public static void main(String[] args) {
int[] a = { 8, 7, 3, 5, 4, 2, 1, 6 };
//bubbleSort2(a);
//print(a);
mineQuickSort(a, 0, a.length-1);
display(a);
}

private static void display(int[] a) {
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + "  ");
}
System.out.println();
}

/**
* 直接插入排序
*
* @param a
* @author  wyq
*/
public static void insertSort(int[] a) {
int temp;
int n = a.length;
for (int i = 0; i < n - 1; i++) {
temp = a[i + 1];
int j = i;
while (j > -1 && a[j] > temp) {
a[j + 1] = a[j];
j--;
}
a[j + 1] = temp;
}
}

/**
* 直接选择排序
*
* @param a
* @author  wyq
*/
public static void selectSort(int[] a) {
int i, j, small;
int temp;
int n = a.length;
for (i = 0; i < n; i++) {
small = i;
for (j = i + 1; j < n; j++)
if (a[j] < a[small])
small = j;

if (small != i) {
temp = a[i];
a[i] = a[small];
a[small] = temp;
}
}
}

/**
* 冒泡排序1
*
* @param a
* @author  wyq
*/
public static void bubbleSort(int[] a) {
int n = a.length;
int temp;
for (int i = 0; i < n; i++) {
for (int j = n - 1; j > i; j--) {
if (a[j] < a[j - 1]) {
temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
}
}
}
}

/**
* 冒泡排序2
*
* @param a
* @author  wyq
*/
public static void bubbleSort2(int[] a) {
int n = a.length;
int temp, flag = 1;
for (int i = 1; i < n && flag == 1; i++) {
flag = 0;
for (int j = 0; j < n - i; j++) {
if (a[j] > a[j + 1]) {
flag = 1;
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}

public static void quickSort(int[] a, int low, int high) {
int i, j;
int temp;
i = low;
j = high;
temp = a[low];

while (i < j) {
// 在数组的右端扫描
while (i < j && temp <= a[j]) j--;
if (i < j) {
a[i] = a[j];
i++;
}
// 在数组的左端扫描
while (i < j && a[i] < temp) i++;
if (i < j) {
a[j] = a[i];
j--;
}
}
a[i] = temp;

if (low < i)
quickSort(a, low, i - 1); // 对左端子集合递归
if (i < high)
quickSort(a, j + 1, high); // 对右端子集合递归
}

/**
*
* @param a
* @param left
* @param right
* @return  中值
*/
public static int partition(int[] a, int left, int right) {
int temp = a[left];

while (left<right) {
while (left<right && temp<a[right]) right --;
a[left] = a[right];
while (left<right && temp>a[left]) left++;
a[right] = a[left];
}
a[left] = temp;

return left;
}

/**
* 另一种快速排序
* @param a
* @param left
* @param right
*/
public static void mineQuickSort(int[] a, int left, int right) {
if (left<right) {
int middle = partition(a, left, right);
mineQuickSort(a, left, middle-1);
mineQuickSort(a, middle+1, right);
}
}
}


研究算法真是锻炼人的逻辑思维能力。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: