c++实现快速排序(c++ 快速排序问题 这段代码5个AC 5个TLE 该怎么改呀)
本文目录
- c++ 快速排序问题 这段代码5个AC 5个TLE 该怎么改呀
- c++ 链表快速排序
- 用C++写快速排序时,排序结果对,但是在末尾有“-858993460”
- C++问题快速排序,无输出结果
- C++ 快速排序 随机30个数字
c++ 快速排序问题 这段代码5个AC 5个TLE 该怎么改呀
代码看起来没什么问题,从你得到的结果5AC 5TLE来看,大概率是数据卡取首快排,如果你把注释的那行取消注释也TLE,那数据可能也卡取中快排。试试随机快排吧:swap(s); //随机选择一个数字与第一个数交换
c++ 链表快速排序
参考代码,由于没有测试过,可能存在错误。#include 《iostream》using namespace std;typedef struct LStudent { string id; string name; float math; float chinese; float english; float aver;} Str_Stu;typedef struct LNode { Str_Stu data; struct LNode *next;}LNode, *pLinkList;enum SortType {__Math = 0, __Chinese, __English};class student { // 为了方便编写代码先把成员变量设置为publicpublic: pLinkList m_pList; int m_listLength;};inline void swap(Str_Stu **pp, int k, int j){ Str_Stu *temp; temp = pp; pp; pp = temp;}void qsort(Str_Stu **pp, int left, int right, SortType st){ int j, last; if (left 》= right) return; swap(pp, left, (left + right)/2); last=left; for (j = left+1; j 《= right; j++) { if (st == __Math && pp-》math) swap(pp, ++last, j); else if (st == __Chinese && pp-》chinese) swap(pp, ++last, j); else if (st == __English && pp-》english) swap(pp, ++last, j); } swap(pp, left, last); qsort(pp, left, last-1, st); qsort(pp, last+1, right, st);}void main(){ student ss; pLinkList cursor; Str_Stu **pp; int i =0; // do something here pp = new Str_Stu *; cursor = ss.m_pList; while (cursor) { pp = &cursor-》data; cursor = cursor-》next; } qsort(pp, 0, ss.m_listLength-1, __Math); for (i = 0; i 《 ss.m_listLength; ++i) { // output the sorted data here } qsort(pp, 0, ss.m_listLength-1, __Chinese); for (i = 0; i 《 ss.m_listLength; ++i) { // output the sorted data here } qsort(pp, 0, ss.m_listLength-1, __English); for (i = 0; i 《 ss.m_listLength; ++i) { // output the sorted data here } delete pp;}
用C++写快速排序时,排序结果对,但是在末尾有“-858993460”
输出到文件多了个数据,你自己读文件数个数就知道了是6个多出一个没赋值的了,查看语句找错误就解决了,你那循环外再度一个list写到文件中?
C++问题快速排序,无输出结果
函数Q()里出了问题
void Q(q R,int s,int t){int j=t,i=s;q tmp;if(s《t){tmp=R;while(i!=t)//这里有问题,导致进入死循环,改成while(i!=j){while(j》i && R.key》=tmp.key)j--;R;while(i《j && R.key《=tmp.key)i++;R;}R=tmp;Q(R,s,i-1);Q(R,i+1,t);}}
如果你能编译通过,改上面一行就行了,不过建议在包含头文件iostream时,这么用
#include《iostream》
using namespace std;
C++ 快速排序 随机30个数字
void swap(int a, int x, int y){ int tmp=a; a; a=tmp;} void qsort(int a, int l, int r){ if(l》=r) return; int i; int index=l; for(i=l+1;i《=r;i++) { if(a) { swap(a,index+1,i); swap(a,index,index+1); index++; } } qsort(a,l,index-1); qsort(a,index+1,r);}int find(int a, int l, int r, int key){ if(l》r) return -1; int mid=(l+r)/2; if(a《key) return find(a,mid+1,r,key); else if(a》key) return find(a,l,mid-1,key) else return mid;} void main(){ srand((unsigned int) time(0)); int a; int i; for(i=0;i《30;i++) a=rand()%100; qsort(a,0,29); int index=find(a,0,29,10); if(index《0) printf("can’t find this number\n"); else printf("find %d at a,index); } //没测试过。你自己试试吧。
更多文章:
thinkpadt430(thinkpad t430当年价位)
2024年7月25日 22:56
thinkbook 14s(thinkbook 14s yoga)
2024年7月27日 02:41
thinkbook 15p(thinkbook15p能用65w的充吗)
2024年7月25日 23:16
thinkpadx230i(thinkpadx230i加装固态硬盘)
2024年7月23日 13:50