排序算法
qtqx
这个作者很懒,什么都没留下…
展开
-
快速排序——C语言
快速排序是冒泡排序的进化版,冒泡原理是比我大的放在我后面或者前面,快速则是比我大的放在后面,比我小的放在前面(前后并不绝对,取决于你是升序或降序)下面举个例子便于更好理解一列数2 4 1 3 5 (贴上自己画的图)假设第一个数 2 为基准key,我们可以再设一个变量t把2赋给t,这样原来2的位置就空下来了。还设了两个指针(此指针仅代表移动方向,非*p这种)由图可以知道找出基准...原创 2018-07-09 09:39:09 · 555 阅读 · 0 评论 -
选择排序——C语言代码
介绍选择排序下面是我在网上找的示例图,便于更好地理解选择排序通过这个图我们明白K只是一个标记,它标记的是比较中 小的数。我们第一轮我们可以找到所有数中最小的数,然后让它和处于第一位的数进行位置交换,第二轮比较时 ,第一轮找出的最小数不在参加比较,然后我们可以找出剩下数中最小的数,之后的每轮同理。下面大家看一下我的代码首先要明白for(j=i+1;j<=9;j++) { if(a[k]&...原创 2018-07-08 11:18:56 · 35124 阅读 · 12 评论 -
冒泡排序——C语言
下面讲一下学习冒泡的一些思路,冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。简单来说就是前后比较,如果前面比后面的大,则交换(这是升序)反之,就是降序。下面看一下代码:这是用C写的简单代码很多初学C语言的的同学不明白冒泡怎么实现的,主要是不理解中间的循环,首先...原创 2018-07-08 10:22:28 · 380 阅读 · 0 评论 -
直接插入排序——C语言
什么是直接插入排序?怎么理解它?举个栗子:比身高,一群人站成一排,你的身高在这些人中不高不矮,要想把你放进去且身高递增,肯定是要比较的,既然要比较那就要有比较的基准,同理要想在无序数组里插入一个数,肯定也要比较,给出一组数{4,2,3,1,5},要把它变成有序怎么办?是不是可以把4看做一个基准,比4大的都在4前面,比4小的都在后面呢?而且2前面只有一个数:4,它一定是有序的!接下来我们试一下: ...原创 2018-07-12 16:03:50 · 359 阅读 · 0 评论 -
折半插入——C语言
折半插入其实就是在寻找插入位置时运用了折半(通俗讲就是我想找这个插入位置,咋找?用折半!)同直接插入,首先一个数组分成两部分第一个数下标为0的数看成一部分(有序!)剩下的是一部分(无序!)1:在无序中依次拿出一个插入有序中:2:在有序中找插入位置3:用折半方法找出插入位置下面给出这个数组贴上代码下面这个就是折半算法具体看下面这个图理解分段如有错误;欢迎指正...原创 2018-07-12 17:29:03 · 894 阅读 · 0 评论 -
希尔排序——C语言,
希尔排序也是一种插入排序,什么样的才是希尔排序呢?我的理解就是王对王,将对将! 什么意思呢?废话不多说,图永远是最直白的东西!看图 第一次分成两小数组 也就是A[0]和A[0] A[1]和A[1] A[2]和A[2] A[3]和A[3]配对(这就是王对王,将对将!)接着掰掰手腕!比较大小然后交换 两个小数组各自又中分,现在变成四个小数组了。同理!A[0]和A[...原创 2018-07-12 17:28:20 · 236 阅读 · 0 评论 -
堆排序——C语言
关于堆不做过多解释(要说的话有点多....)要学堆排序的话对堆肯定有一定的理解。首先从堆顶开始,自左向右依次标号的话(0..n),我们可以发现父子节点的关系(首标为0时)i为父;则左子为2i+1;右子为2i+2;要实现堆排序,1:将无序堆变成有序。2:堆顶元素与堆尾元素交换后,去掉堆尾(此时堆尾最大或者最小,不需要再调整),调整剩下的(因为前面交换首尾,所以堆得有序结构改变了,需要重新调整),使其...原创 2018-07-13 17:18:40 · 308 阅读 · 0 评论