数据结构
crianzy
一路艰辛,默默前行
展开
-
排序算法---插入排序
基本思路:将待排序的数一个个的顺序的插入到已经排好序的数组中。则生成的新的序列也是已经拍好许的序列。问题:插入到已拍好的序列中? 一开始就是没有顺序的数组,如何插入?的确一开始 数组就没有顺序,但是如果这样划分呢,例: int a[]= { 0,59,48,75,98,86,23,37,60 };一开始数组无序。但是原创 2013-04-20 19:52:03 · 649 阅读 · 0 评论 -
排序算法---选择排序
基本思路:选择排序 就是第一次遍历,把最大(最小)放到最前面。第二次遍历,把第二大的放到第二个位置,即将第一次遍后除去最大的那个,再找剩下数中最大的。第三次遍历,除去最大的两个,在找最大的。直到遍历结束。下面是C语言实现:#include void selectSort(int a[] ,int n){ for(int i = 0; i<n ;i++){ in原创 2013-04-20 20:22:56 · 627 阅读 · 0 评论 -
排序算法---堆排序
二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆。下图展示一个最小堆:由于其它几种堆(二项式堆,斐波纳契堆等)用的原创 2013-04-21 10:20:31 · 574 阅读 · 0 评论 -
排序算法---Shell排序
基本思路:先把数组分成差量为d 的几组,即:a[1],a[1+d] ,a[1+d+d] ... 为一组;a[2],a[2+d] ,a[2+d+d] ... 为一组;然后依次对每组进行插入排序。各组排完序后 在 取第二个增量d2 直到 增量 d = 1; 即 所有的数都放在同一组中进行插入排序。下面是 c语言实现#include void shellInse原创 2013-04-20 20:16:17 · 605 阅读 · 0 评论 -
排序算法---快速排序
基本思路:快速排序,数组冲两边出发。首先取一个关键字。在第一次排序后。 大于和小于 关键字的各在 关键字两边。然后在对两边 重复上面步骤,取关键字,排序。直到最后分到只有一个数。C语言实现:#include void quickSort(int a[],int low,int high){ int i = low; int j = high; a[0]原创 2013-04-20 20:37:27 · 567 阅读 · 0 评论 -
排序算法---归并排序
归并排序的基本思路是江两个有序的系列合并,成为一个新的有序序列。首先考虑如何合并两个有序序列://两个有序数组合并 void mergSortArray(int a[] ,int n,int b[],int m ,int c[]){ int i,j,k; i = j = k = 0; while(i<n&&j<m){ if(a[i]<b[j]){ c[k++] = a原创 2013-04-21 11:11:15 · 551 阅读 · 0 评论 -
排序算法---基数排序
基数排序的主要思路是,将所有待比较数值(注意,必须是正整数)统一为同样的数位长度,数位较短的数前面补零. 然后, 从最低位开始, 依次进行一次稳定排序比如这样一个数列排序: 342 58 576 356, 以下描述演示了具体的排序过程(红色字体表示正在排序的数位)第一次排序(个位):3 4 25 7 63 5 60 5 8第二次排序(原创 2013-04-21 11:51:57 · 638 阅读 · 0 评论