https://leetcode-cn.com/problems/sort-an-array/solution/fu-xi-ji-chu-pai-xu-suan-fa-java-by-liweiwei1419/算法 时间复杂度 空间复杂度 稳定性 选择 O(N2) O(1) 不稳定 冒泡 O(N2) O(1) 稳定 插入 O(N2) O(1) 稳定 归并 O(N*logN) O(N) 稳定 堆排序 O(N*logN) O(1) 不稳定 快速排序 O(N*logN) O(logN) 不稳定 桶排序 O(N) O(N) 稳定 辅助记忆 时间复杂度记忆- ...
0、算法概述 0.1 算法分类 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 0.2 算法复杂度0.3 相关概念 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b前面;不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出...
冒泡排序 function bubbleSort(arr){let len = arr.length;for(let i = 0; i < len -1; i++){for(let j = 0; j < len -1 - i; j++){if(arr[j] > arr[j+1]){swap(arr,j,j+1)}}}return arr; } function swap(arr,a,b){let tmp = arr[a];arr[a] = arr[b];arr[b] = tmp; }插入排序 function insertSort(arr){let len = arr.length;for(let i = 0; i < len; i++){let j = i;while (j>0){if(arr[j]<arr[j-1]){swap(arr,j,j-1);j--;}else{...
题目链接:https://www.nowcoder.com/practice/0383714a1bb749499050d2e0610418b1?tpId=40&tqId=21333&rp=1&ru=%2Fta%2Fkaoyan&qru=%2Fta%2Fkaoyan%2Fquestion-ranking&tab=answerKey 题目描述:解题思路: 主要要选择稳定的排序算法。我选择的是冒泡排序,这是稳定的排序算法。还有一点要注意的就是,“Stu stu[100];”这句话要放到int main的外面,不然的话会报错。 ac代码: #include <stdio.h> #include <stdlib.h>typedef st...
一 简单插入排序存在的问题 通过下面这个例子,我们看看简单的插入排序存在的问题。 数组 arr = {2,3,4,5,6,1} 这时需要插入的数 1( 最小), 插入数据的过程如下。 {2,3,4,5,6,6} {2,3,4,5,5,6} {2,3,4,4,5,6} {2,3,3,4,5,6} {2,2,3,4,5,6} {1,2,3,4,5,6} 结论: 当需要插入的数是较小的数时, 后移的次数明显增多,排序变慢。 二 希尔排序法介绍 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排...
1.归并排序public static void mergeSort(int[] arr) {if(arr==null||arr.length<2){return;}mergeSort(arr,0,arr.length-1);}public static void mergeSort(int[] arr, int l, int r) {if (l==r){return;}int mid=l+(r-l)/2;mergeSort(arr,l,mid);mergeSort(arr,mid+1,r);merge(arr,l,mid,r);}public static void merge(int[] arr, int l, int m, int r) {int[] newArr =new int[r-l+1]; //注意这里数组定义的长度int left1=l;int...
1.冒泡排序: 通过每次冒泡排序操作相邻两元素进行比较 找出最大或最小。如果满足条件,两元素间位置进行交换 每一次的冒泡都会找出一个元素达到指定位置// 空杯子 int cup; // 0, {33, 52, 68, 16, 92, 73, 29} 比较n-1次 //第1次:[33, 52, 16, 68, 73, 29, 92] i = 0 //第2次:[33, 16, 52, 68, 29, 73, 92] i = 1 //第3次:[16, 33, 52, 29, 68, 73, 92] i = 2 //第4次:[16, 33, 29, 52, 68, 73, 92] i = 3 //第5次:[16, 2...
排序算法:简单选择排序 #include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; void selectSort(int R[],int n) {int i, j, k;for (int i = 0; i < n; i++){k = i;for (j = i + 1; j < n; j++){if (R[k] > R[j])k = j;}swap(R[i], R[k]);} } int main() {int R[] = { 49, 38, 65, 97, 76, 13, 27, 49 };selectSort(R, 8);system("pause");return 0;}时间复杂度O(n*n); 空间复杂度O(...
算法的渐进分析与高阶实战(含排序算法和图论) 以Python为基础打造算法十二周进阶 算法课程基于Python打造开发而来,但是也是可以作为公用版的数据结构算法教学,学习都是没有问题的。课程旨在打造高级的算法进阶学习,很适合在学习底层以及夯实基础的同学,尤其是在准备相关算法面试的同学,更是尤为合适。课程内容分为了12周,大致的内容是基础的数据类型教学,算法渐进分析,二叉搜索树课程,哈希表,优先队列及树结构,排序算...
本文已被Github仓库收录 https://github.com/silently9527/JavaCore 程序员常用的IDEA插件:https://github.com/silently9527/ToolsetIdeaPlugin 完全开源的淘客项目:https://github.com/silently9527/mall-coupons-server 微信公众号:贝塔学Java前言 快速排序可以说是使用最广的排序算法了,主要的特点是基于原地排序(不需要使用辅助数组,节省空间);其实对于长度为N的数组使用快速排序时间复杂度为 NlogN;在前几篇也一起讨...
就目前所利用的知识中,有两处用到了自定义排序算法。 第一个是sort函数;第二个是部分排序容器的建立,例如map,set,priority_queue。在此记录一些通用的方法,至于其他更多原理,等有时间在记录。 在C++ STL中,对于 vector,有 sort 函数,可以对 vector 中的元素进行排序。 注意,下面的例子, sort(vec.begin(), vec.end(), cmp()),都加了括号,使用的是函数对象,更快。sort() 只对 array、vector、deque 这 3 个容器提供...
选择排序算法原理: 首先从原始数组中找到最小的元素,并把该元素放在数组的最前面,然后再从剩下的元素中寻找最小的元素,放在之前最小元素的后面,知道排序完毕。 ? 思想:循环 i 次 数组中就有 i个有序元素 里层循环 应该从 i+ 1 开始 , 并且 数组中 第 i 个 为 最小值 演示gif : 实现代码:function selectionSort(arr) {var len = arr.length;var minIndex, temp;for(var i = 0; i < len - 1; i++) {minIndex = i;fo...
挖坑填数法+分治思想 import java.util.Arrays;class Solution {public static void main(String[] args) {int[] arr={5,37,8,7,2};quickSort_2(arr,0,4);System.out.println(Arrays.toString(arr));}public static void quickSort_2(int[] data, int start, int end) {if (data == null || start >= end) return;int i = start, j = end;int pivotKey = data[start];while (i < j) {while (i < j && data[j] >= pivotKey) j--;if ...
数据结构基础 一、数据结构 1.数据结构是计算机存储,组织数据的方式,是指相互之间存在一种或者多种特定关系的数据元素的集合 2.通过静心选择的数据结构可以带来更高的运行或存储效率 二、数据结构的两个层次及不同结构的划分方法(逻辑结构&物理结构) 比如:你在排队的时候,你在一队人之间,那个叫逻辑结构,而你在地球上的位置是物理位置 1、逻辑结构 数据元素抽象化的相互关系,与数据的存储无关,独立于计算机,它是从具体问题...
/*** 排序算法-冒泡排序* 冒泡排序(Bubble Sort)算法是所有排序算法中最简单、最基本的一种。* 冒泡排序算法的思路就是交换排序,通过相邻数据的交换来达到排序的目的。* 冒泡排序的思路:* (1)对数组中的各数据,依次比较相邻的两个元素的大小。* (2)如果前面的数据大于后面的数据,就交换这两个数据。经过第一轮的多次比较排序后,便可将最小的数据排好。* (3)再用同样的方法把剩下的数据逐个进行比较,最后便可按照从小...