【第16周 项目1(2) - 快速排序】

来源:互联网 发布:支持向量机python案例 编辑:程序博客网 时间:2024/06/08 19:40

问题描述:

/*   
* Copyright (c)2015级,烟台大学计算机与控制工程学院   
* All rights reserved.   
* 文件名称:11.cpp   
* 作    者:彭友程  
* 完成日期:2016年12月12日   
* 版 本 号:v1.0    
*问题描述:验证快速排序,完成测试。 
*输入描述:无   
*程序输出:测试数据   
*/    

2.以中间位置的元素为基准

实现代码:

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #include <stdio.h>  
  2. #define MaxSize 20  
  3. typedef int KeyType;    //定义关键字类型  
  4. typedef char InfoType[10];  
  5. typedef struct          //记录类型  
  6. {  
  7.     KeyType key;        //关键字项  
  8.     InfoType data;      //其他数据项,类型为InfoType  
  9. } RecType;              //排序的记录类型定义  
  10. void QuickSort1(RecType R[],int s,int t) //对R[s]至R[t]的元素进行快速排序  
  11. {  
  12.     int i=s,j=t;  
  13.     KeyType pivot;  
  14.     RecType tmp;  
  15.     pivot = R[(s+t)/2].key; //用区间的中间位置的元素作为关键字  
  16.     if (s<t)                //区间内至少存在两个元素的情况  
  17.     {  
  18.         while (i!=j)        //从区间两端交替向中间扫描,直至i=j为止  
  19.         {  
  20.             while (j>i && R[j].key>pivot)  
  21.                 j--;        //从右向左扫描,找第1个小于基准的R[j]  
  22.             while (i<j && R[i].key<pivot)  
  23.                 i++;        //从左向右扫描,找第1个大于基准记录R[i]  
  24.             if(i<j)        //将前后的两个失序元素进行交换  
  25.             {  
  26.                 tmp=R[i];  
  27.                 R[i]=R[j];  
  28.                 R[j]=tmp;  
  29.             }  
  30.         }  
  31.         QuickSort1(R,s,i-1);        //对左区间递归排序  
  32.         QuickSort1(R,j+1,t);        //对右区间递归排序  
  33.     }  
  34. }  
  35. int main()  
  36. {  
  37.     int i,n=10;  
  38.     RecType R[MaxSize];  
  39.     KeyType a[]= {6,8,7,9,0,1,3,2,4,5};  
  40.     for (i=0; i<n; i++)  
  41.         R[i].key=a[i];  
  42.     printf("排序前:");  
  43.     for (i=0; i<n; i++)  
  44.         printf("%d ",R[i].key);  
  45.     printf("\n");  
  46.     QuickSort1(R,0,n-1);  
  47.     printf("排序后:");  
  48.     for (i=0; i<n; i++)  
  49.         printf("%d ",R[i].key);  
  50.     printf("\n");  
  51.     return 0;  
  52. }  

运行结果:


知识点总结:

快速排序

心得体会:

以中间为基准展开排序。

0 0