public class SortUtil {
/**
* 冒泡排序<br/>
*
* @param a
*/
public static void maopaoSort(int[] a) {
for (int i = a.length - 1; i >= 0; i--) {
for (int j = 0; j < i; j++) {
if (a[j] > a[j + 1]) {
int tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
}
/**
* 插入排序<br/>
* <ul>
* <li>从第一个元素开始,该元素可以认为已经被排序</li>
* <li>取出下一个元素,在已经排序的元素序列中从后向前扫描</li>
* <li>如果该元素(已排序)大于新元素,将该元素移到下一位置</li>
* <li>重复步骤3,直到找到已排序的元素小于或者等于新元素的位置</li>
* <li>将新元素插入到该位置中</li>
* <li>重复步骤2</li>
* </ul>
*
* @param a
*/
public static void insertSort(int[] a) {
for (int i = 1; i < a.length; i++) {
int tmp = a[i];
int j;
for (j = i; j > 0 && tmp < a[j - 1]; j--) {
a[j] = a[j - 1];
}
a[j] = tmp;
}
}
/**
* 快速排序<br/>
* <ul>
* <li>取第一个元素作为key</li>
* <li>从后向前扫描序列,直到找到比当前key小的值,并做交换</li>
* <li>从前向后扫描序列,直到找到比当前key大的值,并做交换,并记录当前位置(此时左边<key<右边)</li>
* <li>以key位置分成2个数组,重复123</li>
* <li>当每个数组剩余1个元素时,序列已经排好序</li>
* </ul>
*
* @param a
*/
public static void quickSort(int[] a) {
qsort(a, 0, a.length - 1);
}
private static void qsort(int[] a, int left, int right) {
if (left < right) {
int p = get(a, left, right);
qsort(a, left, p - 1);
qsort(a, p + 1, right);
}
}
private static int get(int[] a, int left, int right) {
int key = a[left];
while (left < right) {
while (left < right && a[right] >= key) {
right--;
}
int tmp = a[left];
a[left] = a[right];
a[right] = tmp;
while (left < right && a[left] <= key) {
left++;
}
int tmp2 = a[left];
a[left] = a[right];
a[right] = tmp2;
}
return left;
}
/**
* 选择排序<br/>
* <ul>
* <li>默认第一个元素为排好序的元素</li>
* <li>从第二个元素开始,将元素插入到前面已经排好序的数组中</li>
* </ul>
*
* @param a
*/
public static void selectSort(int[] a) {
for (int i = 0; i < a.length; i++) {
int low = i;
for (int j = i + 1; j < a.length; j++) {
if (a[j] < a[low]) {
low = j;
}
}
int tmp = a[i];
a[i] = a[low];
a[low] = tmp;
}
}
}
java排序算法

欢迎关注,不定期推送任意内容。
您的支持将鼓励我继续创作!