首页 > 其他分享 >快速排序

快速排序

时间:2022-12-24 20:56:21浏览次数:29  
标签:int elem high low SqList 排序 快速

本题要求实现快速排序的一趟划分函数,待排序列的长度1<=n<=1000。

函数接口定义:

int Partition ( SqList L, int low,  int high );

  其中L是待排序表,使排序后的数据从小到大排列。
###类型定义:

typedef  int  KeyType;
typedef  struct 
{                      
  KeyType *elem; /*elem[0]一般作哨兵或缓冲区*/                       
  int Length;      
}SqList;

  

裁判测试程序样例:

  

#include<stdio.h>
#include<stdlib.h>
typedef  int  KeyType;
typedef  struct 
{                      
  KeyType *elem; /*elem[0]一般作哨兵或缓冲区*/                     
  int Length;      
}SqList;
void  CreatSqList(SqList *L);/*待排序列建立,由裁判实现,细节不表*/ 
int Partition ( SqList  L,int low,  int  high );
void Qsort ( SqList  L,int low,  int  high );
int main()
{
  SqList L;
  int i;
  CreatSqList(&L);
  Qsort(L,1,L.Length);
  for(i=1;i<=L.Length;i++)
      printf("%d ",L.elem[i]);
  return 0;
}
void Qsort ( SqList  L,int low,  int  high ) 
{ 
    int  pivotloc;
    if(low<high)
    {  
        pivotloc = Partition(L, low, high ) ;
        Qsort (L, low, pivotloc-1) ; 
        Qsort (L, pivotloc+1, high );
     }
}
/*你的代码将被嵌在这里 */

  

输入样例:

第一行整数表示参与排序的关键字个数。第二行是关键字值 例如:

10
5 2 4 1 8 9 10 12 3 6

  

int Partition ( SqList  L,int low,  int  high ){
  int temp=L.elem[low];
  while(low<high)
  {
    while(low<high&&L.elem[high]>=temp){
      high--;
    }
    if(low<high){
      L.elem[low]=L.elem[high];
      low++;
    }
    while(low<high&&L.elem[low]<temp){
      low++;
    }
    if(low<high){
      L.elem[high]=L.elem[low];
      high--;
    }
    
  }L.elem[low]=temp;
  return low;
}

  

标签:int,elem,high,low,SqList,排序,快速
From: https://www.cnblogs.com/kk4458/p/17003367.html

相关文章

  • Go 快速入门指南 - 自增/自减 和 goto 语句
    自增和主流编程语言的自增语法不同,Go只支持 ​​i++​​​ 方式,不支持 ​​++i​​ 方式。正确packagemainfuncmain(){i:=1i++println(i)//输出2}......
  • Go 快速入门指南 - range 遍历
    概述Go特有的一种的遍历结构。它可以遍历任何一个 ​​集合(字符串、数组、切片、Map、通道等)​​​。语法上类似主流编程语言中的 ​​foreach​​ 语句,但可以获得每次......
  • Go 快速入门指南 - 可见性和作用域
    可见性包通过 ​​导出​​ 机制控制 变量、结构体、函数 等数据可见性。只有1个简单的规则: 首字母大写,可导出,首字母小写,不可导出。 也就是说,Go的访问控制只有两......
  • Go 快速入门指南 - 数组
    概述​​数组​​​ 是具有相同数据类型的一组长度固定的数据项序列,分配在连续的内存地址上。其中数据类型可以是整型、布尔型等基础数据类型,也可以是自定义数据类型。 ​......
  • Go 快速入门指南 - 切片
    概述阅读本小节之前,建议先阅读 数组 小节。​​切片​​ 是对数组的一个连续片段的引用。片段可以是整个数组,也可以是数组的一部分(例如数组的第3个元素到第8个元素......
  • Go 快速入门指南 - 字符切片
    概述建议先阅读 ​​字符串​​, 切片 两个小节。由于字符串不可变,如果每次以 ​​重新赋值​​​ 的方式改变字符串,效率会非常低,这时应该使用 ​​[]byte​​ 类型,[......
  • Go 快速入门指南 - Map
    概述​​Map​​​ 是一种键值对的无序集合,在其他编程语言中也被称为 ​​字典​​​, ​​Hash​​​, ​​关联数组​​。重要的一点是: ​​Map键​​ 的数据类型......
  • Go 快速入门指南 - 有序 Map
    概述​​Map​​​ 的遍历是无序的,这意味着不能依赖遍历的键值顺序。如果想实现Map遍历时顺序永远一致,一个折中的方案时预先给Map的 ​​键​​ 排序,然后根据排序后......
  • Go 快速入门指南 - make 和 new
    概述​​new()​​ 函数为数据类型T分配一块内存,初始化为类型T的零值,返回类型为指向数据的指针,可以用于所有数据类型。​​make()​​​ 函数除了为数据类型T分配内......
  • Go 快速入门指南 - 变长参数和指针参数
    变长参数在函数的最后一个参数的数据类型之前加上省略号 ​​...​​​ ,表示该参数的数据类型是 ​​变长类型​​​,调用该函数时可以传递任意数量 ​​(0-N)​​......