排序算法-后续补充
2021-07-14 19:04
标签:快速排序算法 style [] 固定 数组 code 实现 递归 int 便于自己复习和查阅,特记录一下。 1.冒泡排序(升序) 思路:每一轮将连续两个数比较大小,如果后面的大于前一个,进行交换,每一轮冒泡均能找到一个最大的值; 然后,比较的轮数是length-1-i,解释如下:每一轮产生的最大的都是固定的,所以要减去已经有序的个数,-1的意思是,i只循环到最后一个的前一个,与后一个进行比较就行了 2.快速排序算法(用递归) 思路:找到一个基准值,一般用第一个值记为key,根据key的大小,将待排序元素分成两组,左边的数都小于key,中间为key,右边的值均大于key; 用左右数组下标进行查找记i,j,先从后往前找找到第一个小于key的值,将i 对应的值覆盖,然后i++,向后找,找到第一个大于key的值,将j 对应值覆盖,最后找到基准值的为值,将key放入。然后进行递归。 另一种快速排序 后续,会继续补充。 排序算法-后续补充 标签:快速排序算法 style [] 固定 数组 code 实现 递归 int 原文地址:https://www.cnblogs.com/minghua-b/p/9537639.html 1 public static void bubbleSort(int[] array) {//冒泡排序
2 int temp;
3 for (int i = 0; i //轮数
4 for (int j = 0; j //每一轮比较的个数
5 if (array[j] > array[j + 1]) {
6 temp = array[j + 1];
7 array[j + 1] = array[j];
8 array[j] = temp;
9 }
10 }
11 }
12 }
public static void qucikQuery(int[] array, int left, int right) {//快排 递归实现
int key = array[left];//用来保存第i个值;
int i = left;
int j = right;
if (left >= right) {
return;
}
while (i j) {
while (i key)
j--;
if (i //找到第一个大于key的值,进行交换
array[i] = array[j];
}
while (i key)
i++;
if (i j) {
array[j] = array[i];
}
}
array[i] = key;
qucikQuery(array, left, i - 1);
qucikQuery(array, i + 1, right);
}
public static void quickSort(int[] a, int left, int right) {
if (left > right)
return;
int pivot = a[left];//定义基准值为数组第一个数
int i = left;
int j = right;
while (i j) {
while (pivot //从右往左找比基准值小的数
j--;
while (pivot >= a[i] && i //从左往右找比基准值大的数
i++;
if (i //如果i