- 博客(13)
- 收藏
- 关注
原创 八大排序------------基数排序
基数排序基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法基数排序(Radix Sort)是桶排序的扩展基本思想将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,
2021-11-16 16:27:46
524
原创 八大排序----------归并排序
归并排序归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。基本思想说明:可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。分阶段可以理解为就是递归拆分子序列的过程。合并相邻有序子序列:再来看看治阶段,我们需要将两个已经有序的子序列
2021-11-13 22:48:36
132
原创 八大排序---------快速排序
快速排序基本思想通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列代码展示两种方法进行大家参考。#include <stdio.h>void quickSort(int left,int right,int arr[]) { int l = left; int r = right; int pivot = arr[(left
2021-11-12 14:09:57
580
原创 八大排序---------希尔排序
希尔排序希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。基本思想希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止代码展示#include <stdio.h>int main(){ int arr[]={8,9,1,7,2,3,5,4,6,0};
2021-11-11 15:30:29
286
原创 八大排序------插入排序
插入排序基本思想把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。代码展示#include <stdio.h>int main(){ int arr[8] ={8,3,2,1,7,4,6,5}; int arrSize = sizeof(arr)/sizeof(arr[0]);//数组的长
2021-11-11 13:44:08
255
原创 八大排序---------选择排序
选择排序排序思路分析由上图我们可以看出来,在升序的情况下每次都是找到无序数组中最小的值。如图,第一次将最小的值1放在数组中的最前面,依次类推。代码include <stdio.h>int main(){ int arr[8] ={8,3,2,1,7,4,6,5}; int i,j,min; int ArrSize = sizeof(arr)/sizeof(arr[0]);//数组的长度 int minIndex;//保存最小值的下标 for (i=0;i<Ar
2021-11-10 22:38:45
285
原创 插入排序
插入排序插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素, 无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。我们用代码进行展示过程public class InsertSort { public static void main(String[] args) { int[] arr =
2021-05-07 23:24:55
87
原创 八皇后问题解析
八皇后问题1.问题介绍八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。2.问题分析1.第一个皇后先放第一行第一列2.第二个皇后放在第二行第一列、然后判断是否OK, 如果不OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适3.继续第三个皇后,还是第一列、第二列……直到第8个皇后也能放在一个不冲突的位置
2021-04-23 23:20:46
377
原创 迷宫问题
递归-迷宫问题问题描述:如下图,我们将小球设置为初始的一个位置,让小球运动到箭头的位置我们需要用到回溯算法,我们代码不用图形化界面编写,直接在控制台展示。解题思路:由于我们在控制台展示,我们规定一下,先创建一个8行7列的数组,为 0 表示该点没有走过 当为 1 表示墙 ; 2 表示通路可以走 ; 3 表示该点已经走过,但是走不通。我们将第一行和第八行,第一列和第七列,第3行的第2,3格子设为墙。public class MiGong { public static void main(St
2021-04-09 23:06:28
102
原创 数据结构:约瑟夫问题
学习问题:关于约瑟夫问题问题描述:设编号为1,2…n的n个人围坐一圈,约定编号k为(1<=k<=n)的人从1开始报数,数到m的那个人出列,他的下一位又从1开始报数,数到m的那个人又出列,一次类推,直到所有人出列为止,由此产生一个出队编号的序列。问题思路解析:代码实现:public class 约瑟夫问题 { public static void main(String[] args) { CircleLinedList c = new CircleL
2021-03-05 17:53:35
615
2
原创 2021-01-09
**二维数组与稀疏数组之间的转换1. 关于稀疏数组**当一个数组中大部分元素为0,或者为同一个值得数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:1.记录数组一共有几行几列,有多少个不同的值2.把具有不同值得元素得行列及值记录在一个小规模得数组中,从而缩小程序的规模例如这是正常的二维数组这是转换后的稀疏数组2**. 代码演示-java实现二维数组和稀疏数组相互转换**import java.io.FileInputStream;import java.io.FileNot
2021-01-09 20:54:03
135
原创 关于二叉树的代码实现
1.二叉树的建立和生成#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define MAXNODE 10typedef struct BiNode{ int data; struct BiNode *lchild,*rchild;}BiTNode,*BiTree;void Visit(int data){ printf("%3d",data);} //建立一个空的二叉数int In
2020-11-13 23:07:58
599
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人