快速排序

程序员需要了解的常用算法:

1. 排序算法:快速排序、归并排序、冒泡排序、选择排序、插入排序等。这些算法的时间复杂度和空间复杂度是比较的重点。

2. 查找算法:二分查找、哈希查找、线性查找等。二分查找的实现和时间复杂度分析是重点。

3. 贪心算法:最短路径、最长路径、最小生成树等。这类算法的理论基础和实现是重点。

4. 回溯算法:全排列、N皇后、解数独、0-1背包等。这类算法更侧重递归的应用和实现。

5. 动态规划:斐波那契数列、爬楼梯、最长公共子序列等。这类算法的理论分析、状态转移方程和实现代码是考查重点。

6. 深度优先搜索和广度优先搜索:迷宫寻路、岛屿数量等。这两个算法的区别和实现代码要熟练掌握。

7. 数据结构:栈、队列、链表、树、图等的构建和操作。这些数据结构的特点、实现和应用是重要内容。

8. 字符串匹配算法:KMP算法、Rabin-Karp算法等。这类算法更侧重于匹配文本字符模式的实现。

9. 计算几何:凸包、最近点对等。这块的数学理论和实现难度较大,但考查的可能性也不小。

java快速排序

简介快速排序(Quicksort),计算机科学词汇,适用领域Pascal,c++等语言,是对冒泡排序算法的一种改进。

原理设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。

代码实现package com.zyp.sort;import java.util.Arrays;/** * 快速排序 * @author zyp * @create 2022/2/10 */public class QuickSort { public static void main(String[] args){ int[] array = new int[]{3,9,2,7,6,5,4,1,8}; sort(array, 0, array.length-1); System.out.println(Arrays.toString(array)); } /** * 排序 * @param array 待排序数组 * @param left 左边下标 * @param right 右边下标 */ public static void sort(int[] array ,int left, int right){ int l = left; int r = right; int base = array[l]; while (l < r){ //base的右边找到一个比base小的元素为止 while(array[r] >= base && l<r){ r--; } //就将右边的值覆盖左边的值 array[l] = array[r]; //base的左边找到一个比base大的元素为止 while (array[l] <= base && l<r){ l++; } //就将左边的值覆盖右边的值 array[r] = array[l]; } array[l] = base; if(left < l-1){ sort(array, left, l-1); } if(right > r+1){ sort(array, r+1, right); } }}代码分析1.我们将待排序数组的第一个数作为一个对比数据

2.从右边开始,和对比数据比较,直到比对比数据小,此时将右边的这个数据复制到左边

3.然后从左边开始,和这个对比数据比较直到比对比数据大,此时将左边的数据复制到右边

4.当右边与左边查找的下表相等的时候,我们将这个对比数据放入对应的位置

5.然后将这个对比数据分为左、右两部分,每部分重复1、2、3、4步骤

动态图帮助理解

快速排序c语言

快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。

它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小。

然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

扩展:C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。