
数据结构与算法
文章平均质量分 53
redis_v
这个作者很懒,什么都没留下…
展开
-
交换排序—快速排序(Quick Sort)
基本思想:1)选择一个基准元素,通常选择第一个元素或者最后一个元素,2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值比基准值大。3)此时基准元素在其排好序后的正确位置4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。快速排序的示例:(a)一趟排序的过程:原创 2015-10-17 14:16:01 · 845 阅读 · 0 评论 -
选择排序—堆排序(Heap Sort)
堆排序是一种树形选择排序,是对直接选择排序的有效改进。基本思想:堆的定义如下:具有n个元素的序列(k1,k2,...,kn),当且仅当满足时称之为堆。由堆的定义可以看出,堆顶元素(即第一个元素)必为最小项(小顶堆)。若以一维数组存储一个堆,则堆对应一棵完全二叉树,且所有非叶结点的值均不大于(或不小于)其子女的值,根结点(堆顶元素)的值是最小(或最大)的。如:原创 2015-10-17 11:00:12 · 1270 阅读 · 1 评论 -
选择排序
基本思想:在要排序的一个数组中,选择最大或最小的元素与首位或末尾的元素交换;然后,在剩下的元素中继续选择最大或最小的元素与首位或末尾的元素交换;以此类推,直到第n-1个元素交换完毕。操作方法:第一趟,从n 个记录中找出关键码最小的记录与第一个记录交换;第二趟,从第二个记录开始的n-1 个记录中再选出关键码最小的记录与第二个记录交换;以此类推.....原创 2015-10-17 10:40:49 · 543 阅读 · 0 评论 -
插入排序
基本思想:将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。直接插入排序:设立哨兵,作为临时存储和判断数组边界,记录要插入的元素。要插入的元素若比前一个元素小,就和前一个元素交换,然后,再进行比较,知道大于或等于前一个元素。如果碰见一个和插入元素相等的,那么原创 2015-10-17 10:12:51 · 606 阅读 · 0 评论 -
交换排序—冒泡排序(Bubble Sort)
基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。冒泡排序的示例: 算法的实现:#include"iostream"using namespace std;void swap(int *a, int原创 2015-10-17 13:34:25 · 764 阅读 · 0 评论 -
归并排序(Merge Sort)
基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序示例: 合并方法:设r[i…n]由两个有序子表r[i…m]和r[m+1…n]组成,两个子表长度分别为n-i +1、n-m。j=m+1;k=i;i=i; /原创 2015-10-19 00:52:07 · 949 阅读 · 1 评论 -
排序算法汇总
转载自:http://blog.youkuaiyun.com/hguisu/article/details/7776068概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog转载 2015-09-18 15:34:09 · 591 阅读 · 0 评论