IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 算法排序-------快速排序 -> 正文阅读

[数据结构与算法]算法排序-------快速排序

排序算法

查找算法:折半查找

冒泡排序

时间复杂度O(n**2) 空间复杂度O(1)稳定

快速排序

快速排序使用分治法策略来把一个串行(list)分为两个子串行(sub-list)。从本质来看,快速排序应该算是在冒泡排序的基础上的递归分治法

时间复杂度O(ologn)如果不考虑递归问题的化空间复杂度为O(1)稳定的算法

基本操作步骤

1.从数列中挑出一个元素,称为“基准”(pivot)

2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

3.递归地把小于基准值的元素的子数列和大于基准值元素的子数列排序

具体实现

【4,7,1,8,10,6,5,3,7,9】

1.pivot=4 start=0 end =9

low=0 high=9 pivot=4=arr[low]

首先从高端部分开始进行比较,保证高端部分比pivot大。如果值比4大,则–

high=7 此时high指针执行的值比pivot小,arr[low]=arr[high]

[3,7,1,8,10,6,5,3,7,9] low =0 high=7 pivot=4

开始比较低端,从low执行的数据开始比较,直到有数据比pivot大为止

如果low指向的数据比pivot小,则low++

low=1时对应得数据为7,比pivot大,则arr[high] = arr[low]

[3,7,1,8,10,6,5,7,7,9] low =1 high =7 pivot=4

一轮对比完的结束条件应该是low>=high,当前low=1<high =7

继续比较高端,比较方式同第一次比较 high–,具体值为2,arr[high]<pivot ,所以需要赋值

[3,1,1,8,10,6,5,7,7,9]low=1 high=2 pivot=4

继续比较低端low low++

此时low==high,本次循环结束,回存基准值

[3,1,4,8,10,6,5,7,7,9]可以发现在4左端的所有数据都比4小,而4右端的数据都比4大


将原始数组分为2部分继续排序

arr0—2 arr3----9

以左端为例[3,1,4]

low=0 high=2 pivot=3=arr[low]

1.4>3所以high-- low=0 high=1

2.arr[high]<pivot 所以进行修改操作arr[low]=arr[high],所以[1,1,4] low =0 high = 1 pivot=3

3.比较低端,如果值小则low++ low=1 high=1 pivot=3

4.此时low high重合,则进行循环结束并赋值[1,3,4]


将原始数据分为两部分继续排序

arr 0-----1 arr2—2 不需要排序

public class QuickSort {

	public static void main(String[] args) {
		int[] arr = new int[] { 3, 45, 13, 76, 27, 53, 8, 3, 8, 2, 5, 6 };
		quickSort(arr, 0, arr.length - 1);
		for (int temp : arr) {
			System.out.print(temp + "  ");
		}
	}

	public static void quickSort(int[] arr, int start, int end) {

		if (start < end) {
			int pivot = arr[start];
			int low = start;
			int high = end;
			while (low < high) {
				while (low < high && arr[high] >= pivot) {
					high--;
				}
				arr[low] = arr[high];
				while (low < high && arr[low] <= pivot) {
					low++;
				}
				arr[high] = arr[low];
			}
			arr[low] = pivot;
			quickSort(arr, start, low);
			quickSort(arr, low + 1, end);
		}
	}
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-07 12:17:52  更:2021-12-07 12:19:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 10:31:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码