public static void bubbleSort(int[] arr) {
//冒泡排序 时间复杂度n2,空间复杂度1,稳定排序
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
//与冒泡排序一样,快速排序也属于交换排序,通过元素之间的比较和交换来排序
public static void quickSort(int[] arr, int start, int end) {
//快速排序 时间复杂度nlogn,空间复杂度logn,不稳定排序
//递归结束条件
System.out.println("start:" + start + ",end:" + end);
if (start >= end) {
return;
}
int partitionIndex = partition(arr, start, end);
System.out.println(" partitionIndex:" + partitionIndex);
quickSort(arr, start, partitionIndex - 1);
quickSort(arr, partitionIndex + 1, end);
}
//获取基准位置 - 分治法
public static int partition(int[] arr, int start, int end) {
int pivot = arr[start];
int left = start;
int right = end;
while (left < right) {
while (left < right && arr[right] > pivot) {
right--;
}
while (left < right && arr[left] <= pivot) {
left++;
}
if (left < right){
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
}
//交换pivot到中间位置
arr[start] = arr[left];
arr[left] = pivot;
return left;
}
public static void main(String[] args) {
int[] arr = {3,6,2,1,9,7,5};
// bubbleSort(arr);
quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
冒泡排序+快速排序
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 排序算法——希尔排序 希尔排序是插入排序的一种,又称"缩小增量排序”,是插入排序算法的一种更高效的改进版本。 希尔...
- 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序...
- 1、冒泡排序 图解: 2、选择排序 图解: 3、快速排序 图解: 4、插入排序 图解: 5、希尔排序 图解: 6、...
- 前言## 还记得我们学习C语言的时候的常用的三大排序吗?选择、冒泡、快速排序当时学习的时候感觉好无聊、听着也没有什...