第10章quick sort.pptVIP

  • 1
  • 0
  • 约2.11千字
  • 约 8页
  • 2018-03-27 发布于河南
  • 举报
第10章quick sort

要 求 熟练掌握以下内容: 熟悉选择排序方法的基本思想 基本思想 快速排序是由冒泡排序改进而得的,它的基本思想是:在待排序的n个记录中任取一个记录(通常取第一个记录),把该记录放入适当位置后,数据序列被此记录划分成两部分。所有关键字比该记录关键字小的记录放置在前一部分,所有比它大的记录放置在后一部分,并把该记录排在这两部分的中间(称为该记录归位),这个过程称作一趟快速排序。之后对所有的两部分分别重复上述过程,直至每部分内只有一个记录为止。简而言之,每趟使表的第一个元素放入适当位置,将表一分为二,对子表按递归方式继续这种划分,直至划分的子表长为1。 public void QuickSort(SeqListint sqList, int low, int high) { if (low high) return; int pivot = sqList.Data[low]; int i = low + 1; int j = high; int temp; while (i j) { while ((i j) (pivot = sqList.Data[i])) { ++i; } while ((j = i) pivot = sqList.Data[j]) { --j; } if (i j) { temp = sqList.Data[i]; sqList.Data[i] = sqList.Data[j]; sqList.Data[j] = temp; } } if (low j) { temp = sqList.Data[low]; sqList.Data[low] = sqList.Data[j]; sqList.Data[j] = temp; } QuickSort(sqList, low, j - 1); QuickSort(sqList, j + 1, high); } 5.效率分析 时间效率:在n个记录的待排序列中,一次划分需要约n次关键码比较,时效为O(n),若设T(n)为对n个记录的待排序列进行快速排序所需时间。 理想情况下:每次划分,正好将分成两个等长的子序列,则时间复杂度为O(nlog2n); 最坏情况下:快速排序每次划分,只得到一个子序列,这时快速排序蜕化为冒泡排序的过程,其时间复杂度最差,为O(n2)。 快速排序是通常被认为在同数量级(O(nlog2n))的排序方法中平均性能最好的。 快速排序是一个不稳定的排序方法。 * Confidential * ? Neusoft Confidential * 第10章 排序算法(4) 本次课内容: 快速排序 对数据序列:70,75,69,32,88,18,16,58进行快速排序。 void QuickSort(RecType R[],int s,int t) /*对R[s]至R[t]的元素进行快速排序*/ { int i=s,j=t; RecType temp; if (st) /*区间内至少存在一个元素的情况*/ { temp=R[s]; /*用区间的第1个记录作为基准*/ while (i!=j) /*从两端交替向中间扫描,直至i=j为止*/ { while (ji R[j].keytemp.key) j--; if (ij) /*表示找到这样的R[j],R[i]、R[j]交换*/ { R[i]=R[j]; i++; } while (ij R[i].keytemp.key) i++; if (ij) /*表示找到这样的R[i],R[i]、R[j]交换*/ { R[j]=R[i]; j--; } } R[i]=temp; QuickSort(R,s,i-1);

文档评论(0)

1亿VIP精品文档

相关文档