设有一个线性表采用顺序存储结构,表中的数据元素值为正整数(n个).设在O(n) 时间内,将线性表分成两为两部分,其中左半部分每个元素都小于原表的第一个元素,而右半部分则相反.
人气:213 ℃ 时间:2020-08-04 02:26:20
解答
不知道你是否学过快速排序算法,在算法中有划分算法,实现的就是你说的这个操作.思想是:以第一个元素为轴,开始时设置2个指针(一个在最左端【不包括第一个元素】,一个在最右端)若两个指针没有重合,从右向左扫描每个...#include "数据操作.h"void main(){ printf("请输入数据表中关键字个数:\n"); int len;//数据表中关键字个数 scanf("%d",&len); SeqList SL;//声明数据表类型变量 if(CreateList(&SL,len)) //创建数据表 {printf("数据表创建成功,划分前关键字如下:\n");PrintList(SL);//输出数据表int pivot; //枢纽pivot=(int)rand()%1000;//随机生成枢纽printf("枢纽为:%d\n",pivot); int partionIdx=Partion(&SL,cmp,swp,1,SL.len,pivot);//划分printf("划分位置:%d\n",partionIdx-1); //输出划分位置printf("划分后关键字如下:\n"); PrintList(SL);//输出数据表 } elseprintf("数据表无元素,数据表创建失败!\n");}#ifndef _TBOPP_H_#define _TBOPP_H_#include #include #include //数据表存储结构类型//数据表中记录的关键字类型typedef int KeyDT;//数据表记录类型typedef struct{ KeyDT key;//关键字 //为简化程序,省略其余记录项}RecType;//数据表类型,采用定长顺序存储结构typedef struct { RecType * List;//数据表头指针 int len ; //数据表长度}SeqList;//声明布尔类型typedef enum {TRUE=1,FALSE=0} BOOL;//函数声明BOOL CreateList(SeqList * PL,int n);void PrintList(SeqList SL);intPartion(SeqList * PL,int(*cmp)(KeyDT,KeyDT),void(*swp)(KeyDT *,KeyDT *),int leftptr,int rightptr,int pivot);int cmp(KeyDT,KeyDT);void swp(KeyDT *,KeyDT *);#endif
推荐
- 若长度为n的线性表采用顺序存储结构,在第i个位置插入一个元素,需要它依次向后移动______数据元素.
- 已知长度为n的线性表A中的元素是整数,采用顺序储存结构,删除线性表中所有值为x的数据元素.
- 已知长度为n的线性表A采用顺序存储结构,请写一算法,找出该线性表中值最小的数据元素.
- 已知长度为n的线性表A采用顺序存储结构,写一时间效率有效的算法,删除数据元素[x,y]之间的所有元素.
- 若一个线性表L采用顺序储存结构储存,其中所有元素为整数.设计一个算法,删除元素值在[x,y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1)
- 两个数的积是96,他们的最大公约数是4,这两个数分别是几和几?
- 材料作文:
- 713除以31的商,再乘13分之2,积是多少
猜你喜欢
- 一年级孝敬父母手抄报怎么写
- 我的直尺,用英语,一本英汉字典,在铅笔盒里,那枝铅笔,拼写你的名字,一块橡皮,这些用英语怎么说
- in are some school student library the连词成句
- 一组数据-1,-2,x,1,2的平均数为0,则这组数据的方差为_.
- 已知|x+2|+2(y-1/2)的平方=c,求代数式3y的平方-6x的平方y-4y的平方+2x的平方y
- 一道 初二数学 整式的乘除与因式分解 选择题.
- 不等式a^2+3b^2≥x b(a+b)对任意的a,b∈R恒成立,则实数x的最大值是
- 要使关于x、y的多项式1/2x^2-mxy+(1-m)x-ny-3中不含一次项,求m+2n的值.