算法思想:java
private static void Sort(int[] a) {
boolean tag;//用于判断实时的数组是否已经有序
for (int i = 0; i < a.length - 1; i++) {
//总共须要a.length-1趟排序,由于每趟只归位一个元素,需将a.length-1个元素归位便可使整个数组有序
tag = true;//每趟开始以前将标志置为true
for (int j = 0; j < a.length - 1- i; j++) {
//第i趟只须要比较a.length-i-1次,如:第一趟只须要比较a.length-1次
if (a[j] > a[j + 1]) {
int temp = 0;
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
tag = false;//发生交换就将标志位置为false,表示当前数组尚未彻底有序;
}
}
if (tag) {//进行一趟完整的排序后没有发生交换则说明已经排序完成;
return;//结束排序
}
}
}复制代码
效率及稳定性:
算法
public static void quickSort(int[] a) {
if (a.length > 0) {
quickSort(a, 0, a.length - 1);
}
}
//核心递归体
private static void quickSort(int[] a, int low, int high) {
//递归出口
if (low > high) {
return;
}
int i = low;
int j = high;
int key = a[low]; //基准元素取第一个元素,取其余的直接改就行,2八、29行也要改
//完成一趟排序
while (i != j) {//每当ij相等时跳出外层循环,每完成一趟遍历ij都是相等的;
while (a[j] > key) {//从右往左找到第一个小于等于key的数
j--;
}
while (a[i] <= key && i < j) {//从左往右找到第一个大于key的数,等于时也继续,i<j保证i不可能大于j
i++;
}
//交换两数字位置
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
//调整key的位置,将key的位置与ij相遇的位置交换
int temp = a[i];
a[i] = a[low];
a[low] = temp;
//对key左边的数进行排序
quickSort(a, low, i - 1);
//对key右边的数进行排序
quickSort(a, i + 1, high);
}
复制代码