![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
小兔崽崽!
我还年轻!!!
展开
-
排序算法:插入排序(java实现)
插入排序思想:把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。 时间复杂度为:O(n^2)代码实现:import java.util.Arrays;public class Test { public static void main(String[] args) { int[] arr = {7,6,9,3,1,5,原创 2021-07-29 21:16:44 · 88 阅读 · 0 评论 -
排序算法:二分归并排序(java实现)
归并排序(Merge Sort):是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法的一个非常典型的应用。算法思路把长度为n的输入序列分成两个长度为n/2的子序列;对这两个子序列分别采用归并排序;将两个排序好的子序列合并成一个最终的排序序列。package sort;import java.util.Arrays;public class MergeSort { public static void main(String[] args) { int[] arr原创 2021-07-31 20:48:52 · 783 阅读 · 0 评论 -
排序算法:冒泡排序(Java实现)
冒泡排序是一种简单的排序算法。时间复杂度为:O(n^2) 冒泡排序每趟都会把最大的元素排到后面代码实现:public class Test { public static void main(String[] args) { int[] a = {9,8,5,4,2,0}; bubbleSort(a); System.out.println(Arrays.toString(a)); } public static void bubbleSort(int[] a) { for原创 2021-07-29 20:52:34 · 79 阅读 · 0 评论 -
排序算法:桶排序(java实现)
桶排序是计数排序的升级版。桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序。桶排序利用了函数的映射关系把数据分配到桶里,高效与否的关键就在于这个映射函数的确定。算法思路根据待排序集合中的数据,确定映射规则和桶的数量;遍历待排序集合,将每一个元素根据映射规则,移动到对应的桶中;对每一个桶中元素进行排序。*依次输出每个桶中的数据,得到整个有序的集合。步骤:1.找出待排序数组中的最大值max、最小值min2.桶的数量为(max原创 2021-08-01 21:03:37 · 490 阅读 · 0 评论 -
排序算法:计数排序(java实现)
计数排序是一种非比较排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。int[] a = {5,3,5,8,2,10}对数组a进行计数排序数组中最大的数是10,所有我们需要建立一个大小为11的计数数组计数数组中每一位的大小就是该数组下标在a数组中出现的次数。int[] count = {0,0,1,1,0,2,0,0,1,0,1}最后只需要遍历一遍统计数组,更新一下原数组a就完成了计数排序im原创 2021-07-31 21:24:25 · 289 阅读 · 0 评论 -
排序算法:选择排序(java实现)
选择排序是一种简单直观的排序算法。算法思想:以由小到大排序为例,首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。时间复杂度:O(n^2) public static void selectionSort(int[] arr) { for(int i=0; i<arr.length; i++) { int index = i; for(int j=i+1; j&原创 2021-07-29 22:40:44 · 265 阅读 · 0 评论 -
排序算法:希尔排序(java实现)
希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。算法基本思想:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。import java.util.Arrays;public class Test { public stati原创 2021-07-29 22:30:14 · 80 阅读 · 0 评论 -
排序算法:快速排序(java实现)
快速排序(Quicksort)是对冒泡排序算法的一种改进。时间复杂度为:nlogn快速排序算法的排序流程如下:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。import java.util.Arrays;public class Test_06_快速排序 { public static void main(String[] args) { int[] arr = {5原创 2021-07-29 20:55:22 · 128 阅读 · 0 评论 -
排序算法:堆排序(Java实现)
import java.util.Arrays;public class Test_02 { public static void main(String[] args) { int[] arr = { 27, 46, 12, 33, 49, 27, 36, 40, 42, 50, 51 }; heapSort(arr); System.out.println(Arrays.toString(arr)); } public static void heapSort(int[原创 2021-07-29 23:43:47 · 67 阅读 · 0 评论 -
插入排序
插入排序的基本思想是:将数组的第一个数认为是有序数组,从后往前(从前往后)扫描该有序数组,把数组中其余n-1个数,根据数值的大小,插入到有序数组中,直至数组中的所有数有序排列为止。这样的话,n个元素需要进行n-1趟排序#include <bits/stdc++.h>using namespace std;void StraightSort(int *arr,int len){ int temp;int j; for(int i=1;i<len;i++){原创 2020-07-15 14:45:39 · 97 阅读 · 0 评论 -
FindMaxMin(分治求最大最小问题)
思路:运用分治的思想,将要排序的整个数组从中间劈开,分别求其左右两边的最大最小值,然后将求出的最大最小值合起来进行比较。当左右两边的数组小到一定程度时:(1)数组中只有一个元素,maxNum=minNum;(2)数组中有两个元素,找出两个元素中的最大最小值;(3)数组中大于两个元素,从中间分开,继续递归;#include<stdio.h>#include<iostr...原创 2019-12-08 16:18:48 · 1795 阅读 · 1 评论 -
哈夫曼树
哈夫曼树的构建过程?1.给出一个数组,以每个元素为基础,创建一个叶子节点数组。2.从中找出权值最小的两个节点,构建一棵树。这棵树的权值等于两个节点权值之和。左子树等于权值最小的那个节点,右子树等于权值次小的那个节点。3.将该树的根放入节点数组中原来权值最小的那个位置4.不断执行2-3步骤,最终得到一棵哈夫曼树。l...原创 2019-12-08 16:19:09 · 262 阅读 · 0 评论 -
最小生成树(prime和Kruskal)
Prime算法的核心步骤是:在带权连通图中V是包含所有顶点的集合, U已经在最小生成树中的节点,从图中任意某一顶点v开始,此时集合U={v},重复执行下述操作:在所有u∈U,w∈V-U的边(u,w)∈E中找到一条权值最小的边,将(u,w)这条边加入到已找到边的集合,并且将点w加入到集合U中,当U=V时,就找到了这颗最小生成树。 其实,算法的核心步骤就是:在所有u∈U,w∈V-U的边(u,w)...原创 2019-12-08 16:19:36 · 865 阅读 · 0 评论 -
二分检索算法(迭代和递归)
#include<bits/stdc++.h>using namespace std;int binarySearch(int a[],int n,int x ){ int left=0, right=n-1; while (left <= right) { int middle = (left+right)/2; ...原创 2019-12-08 16:18:59 · 692 阅读 · 0 评论 -
约瑟夫环问题
问题描述:约瑟夫环问题是,编号为1,2,3,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码。开始时任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。基本要求:利用单链表存储结构模拟此问题,按照出列顺序打印各人的编号。测试数据:M的...原创 2019-10-05 22:48:03 · 265 阅读 · 0 评论 -
最大公约数(欧几里得算法)
一般把a,b的最大公约数记成gcd(a,b) , gcd(a,b) = gcd(b,a%b) (a>b>0).①递归:#include<bits/stdc++.h>using namespace std;int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b);}...原创 2019-10-03 00:00:05 · 97 阅读 · 0 评论 -
快速排序(算法)
快速排序 1题目描述利用快速排序算法将读入的N个数从小到大排序后输出。快速排序算法,类似于归并,也有分治的一种思想,即找到一个基准数,将比它大的放在它的右边,比它小的放在它的左边。此题请设计基准数的位置为最左边。输入输入的第一行包含1个正整数n,表示共有n个整数需要参与排序。其中n不超过100000。第二行包含n个用空格隔开的正整数,表示n个需要排序的整数。输出只有1行,包含n个整数...原创 2019-09-25 21:53:46 · 1738 阅读 · 0 评论