数据结构专科电子教案九.pptVIP

  • 2
  • 0
  • 约6.29千字
  • 约 48页
  • 2019-09-06 发布于广东
  • 举报
直接插入一趟插入方法 若 xlist[j],则 L.list[j+1]=L.list[j] ; j - - ; 直到 x=list[j] 或 j0 为止, L.list[j+1]=x 快速排序的过程: 首先从待排序区间中选取一个元素(一般选取该区间的第一个元素)作为比较的基准元素,通过从区间两端向中间顺序进行比较和交换,把每次在前面单元中碰到的大于等于基准元素排序码的元素同在后面单元中碰到的小于等于基准元素排序码的元素交换其值,使得前面单元元素的排序码比基准元素小,后面单元元素的排序码比基准元素大。当所有元素都比较过一遍后,把基准元素交换到前后两部分单元的交界处(即排序后基准元素的最终位置),然后再对前后两个子区间分别进行上述过程。 快速排序中,把待排序区间按照第一个元素(基准元素)的排序码分为前后(或称左右)两个区间的过程称为一次划分。 45 53 18 36 72 30 48 93 15 36 快速排序中进行一次划分的过程示例 45 36 53 15 72 45 30 注意:一次划分中最后的 i 或者等于 j , 或者等于 j+1 。 void QuickSort ( ElemType A[ ] , int s , int t ) { int i= s ; j= t+1 ; ElemType x= A[s] ; do { do i + + ; while ( A[ i ].stn x.stn ) ; do j - - ; while ( A[ j ].stn x.stn ) ; if ( i j ) { ElemType temp=A[ i ] ; A[ i ]=A[ j ] ; A[ j ]=temp ; } } while ( i j ) ; A[s]=A[ j ] ; A[ j ]=x ; if (s j-1 ) QuickSort ( A , s , j –1 ) ; if (j+1 t ) QuickSort ( A , j+1 , t ) ; } 快速排序算法 30 36 18 36 15 45 48 93 72 53 快速排序的过程示例 18 15 30 36 36 15 18 36 36 48 53 72 93 53 72 快速排序是不稳定的 分析 快速排序中,若把每次划分所用的基准元素看作根结点,把划分得到的左区间和右区间看作为根结点的左子树和右子树。那么整个排序过程就对应一棵具有n个元素的二叉搜索树,所需划分的层数就等于对应二叉搜索树的高度减 1 ,所需划分的所有区间数等于对应二叉搜索树中分支结点数。 21 25 49 25 16 08 0 1 2 3 4 5 pivot 21 25 25 16 49 08 pivot pivot 21 08 25 21 25 49 划分的层数等于对应二叉搜索树的高度减1 区间数等于对应二叉搜索树的分支结点数 * * 第九章 排序 二、 选择排序 三、 交换排序 四、 归并排序 一、 排序的基本概念 9.1 排序的基本概念 排序(sorting) 排序域 (排序项).stn 排序码 递增的有序表称为升序表(正序表) 递减的有序表称为降序表(逆序表) 稳定排序 不稳定排序 内部排序方法大致可分为下列几种类型: 插入排序 交换排序 选择排序 归并排序 分配排序 内部排序与外部排序 简单排序、堆排序的方法  简单排序、堆排序的过程是一个逐步扩大记录的有序序列长度的过程。 经过一趟排序 有序序列区 无 序 序 列 区 有序序列区 无 序 序 列 区 插入排序是稳定的 排序方法:将待排序的 n 个元素看作一个有序表和一个无序表,开始时有序表只有一个元素,无序表中包含有 n-1 个元素,以后每次从无序表中取出第一个元素,把它插入到有序表中的合适位置,使之成为一个新的有序表,经过 n-1 次后,排序结束。 插 入 排 序 void InsertSort ( ElemType A[ ] , int n)

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档