C语言排序算法大全:从插入到堆排序,一网打尽

创始人
2025-01-12 12:47:21
0 次浏览
0 评论

C语言排序问题,急~C语言或C++均可。

/*各种排序操作*/#include#defineMAX100/*函数声明*/voidcharu_sort(intd[],intn);voidjiaohuan_sort(intd[],intn);voidxuanze_sort(intd[],intn);voidxier_sort(intd[],intn,intdd[],intt);/*山排序*/voidkuaisu_sort(intd[],intmin,intmax);/*快速排序*/voiddui_sort(intd[],intn);/*堆排序*//*主函数*/voidmain(){intd[MAX],dd[MAX];ints,q,t,n,k,m,ch;/*线性表节点数*/printf("有多少个节点?\n");scanf("%d",&n);/*输入线性表中的每个节点线性表*/for(s=0;sscanf("%d",&d[s]);
}/*选择排序方式*/printf("Pleaseinputyourchoice(1-6)):");scanf("%d",&ch);switch(ch){case1:printf("这是直接插入排序!\n");s=1;charu_sort(d,n);getch();break;case2:printf("这是冒泡排序!\n");jiaohuan_sort(d,n);getch();break;case3:printf("这是简单选择排序!\n");xuanze_sort(d,n);getch();break;case4:printf("Thisisshellsort!\n");/*开始ethearray*/s=n;q=0;while(s>1){dd[q++]=s/2;s=s/2;}/*thelastincrementis1*/xier_sort(d,n,dd,q);getch();Break;case5:printf("这是快速排序!\n");kuaisu_sort(d,0,n-1);getch();break;case6:printf("这是快速排序!\n")排序!\n");dui_sort(d,n);getch();break;default:printf("1--------------直接插入排序!\n");printf("2--------------冒泡排序!\n");printf("3----------------简单选择排序!\n");printf("4----------------希尔排序!\n");printf("5-------------快速排序!\n");printf("6--------------堆排序!\n");return;}/*打印排序后的线性表*/for(s=0;s=0&&t=m+1;s--)if(d[s]=m+1;s--)if(d[s]for(x=h;x{y=d[x];
for(k=x-h;k>=0&&yd[k+h]=d[k];/*回移*/
d[k+h]=y;
}}}/*快速排序*/voidkuaisu_sort(intd[],intmin,intmax){inthead,tail;我ntt;if(min=t)tail--;if(head=0){duitiaozheng(d,s,n);s--;}s=n-1;而(s>0){t=d[0];/*替换节点*/d[0]=d[s];d[s]=t;duitiaozheng(d,0,s);/*替换后重新平衡堆*/s--;}}

用C语言写个完整程序,包括希尔排序和快速排序

这两个程序我都调试过,没有问题。
这是一个希尔排序C程序,输入一个整数数组,NUM是数组的长度,nStep是步数,STEP是步数数组:/*codebyjgao*/#include#definenStep5/*numofstep*/#DefineNUM30/*numoftoBeSortedarray*/voidshellSort(int[],int);/*函数*/voidprintS(int[],int);/*printarray*/staticinttimes=0;/*计数器*/intSTEP[nStep]={15,8,4,2,1};/*steparray*/intmain(){ints[NUM]={813,87,365,621,488,901,237,551,686,134,4,765,342,145,962,451,288,552,682,34,88,552,98,532,881,183,248,672,978,-43};/*toBeSortedarray*/printf("输入:\n");printS(s,NUM);shellSort(s,NUM);/*排序*/printf('\n输出:\n');printS(s,NUM);return0;}voidshellSort(ints[],intn){inti,j,k;对于(我=0;i=k)继续;else{inttmp=s[索引];m=k;while(m>l){s[j+m*步长]=s[j+(m-1)*步长];m--;};s[j+l*step]=tmp;}}printf(''\n");printS(s,n);}}}voidprintS(ints[],intn){inti;for(i=0;i

图解:C语言希尔排序

希尔排序是DonaldShell在1959年提出的插入排序算法的升级版本。
与常规插入排序相比,希尔斯排序由于分组和插入操作而具有更好的排序效率。
该算法的时间复杂度为``O(nLogn)~O(n^2)'',这是超越O(n^2)的革命性进步。
排序过程包括将数据分组并排序。
假设您需要对一组数据进行排序。
步骤如下:1.首先,对数据进行分组。
组的数量会根据数据量而变化,并且每组的数量相同。
例如,如果数据大小为8,则会分为4组。
2.对每组进行插入排序,得到初步的排序结果。
3.逐渐减少组数,重复步骤1和2,最后进行插入排序,完成所有数据的排序。
您可以动态查看排序过程,直观地了解算法的工作原理。
该代码使用示例步长大小4实现如下:首先进行一次插入排序,然后进行第二次步长为2的排序,最后进行三次步长为1的排序,完成整个排序。
过程。
排序完成后,您将获得最终的排序数据列。

C语言编程,二路归并排序,希尔排序

#include#includeusingnamespacestd;intn=20;classstudent{longintnum;//学号charname[20];//姓名intgrade;public:student(){}student(longnu,charna[],intgr){num=nu;strcpy(name,na);grade=gr;}voidput_student(longnu,charna[],intCh中文,intmath,intEnglish){num=nu;strcpy(name,na);grade=中文+数学+英语;}intget_grade(){returngrade;}voidget_student(){cout<>num>>name>>grade;classstudentc(num,name,grade);for(inti=0;ii;j--)a[j]=a[j-1];a[j]=c;}voiddel(classstudenta[])//删除不及格学生记录{intj=0;for(inti=0;i=(60*3))a[j++]=a[i];n=j;}voidsave(classstudent[])//排序结果它们以文件的形式存储在磁盘上{FILE*fp;if((fp=fopen("save_student.dat","w"))==NULL){cout<<"ERROR"<你的意思是在同一个组吗?==student.dat格式学号姓名3课程成绩1Adaam89050
热门文章
1
c语言有三维数组吗 C语言三维数组初始化详细方法和步骤如下:1第一步,需要定义一个数组。常见的数组类...

2
js字符串包含某个字符串的个数 js问题:求字符串中某个字符出现的个数的方法?看看是否满足你的需求(x);}pu...

3
轻松调整SQL Server 2008表... sql2008表格怎么只能编辑前两200行200线是默认设置,并且仅在号码开通时...

4
C语言基础解析:从Hello World... C语言的基本要素有哪些?基本的C语言格式可以参考基本的helloworld程序。...

5
Python排列组合与循环运用技巧解析 怎样使用Python进行排列组合?对于这类问题,我们可以使用分割循环来执行转换和...

6
C语言for循环技巧:非C字符位置记录与... C语言for循环问题求解.在for中,我记录了要写入的非c字符的位置。仅当字符不...

7
Hive内置函数全解析:数学、字符串、日... 2021年大数据Hive(五):Hive的内置函数(数学、字符串、日期、条件、转...

8
Python随机数生成技巧:轻松输出任意... python通过键盘输入随机数种子,产生50个[0,100]之间的随机正整数,然...

9
C语言实现字符串倒序输出教程 请教C语言字符串倒序输出#include#includevoidmain(){c...

10
C语言一元二次方程解答器实现与优化 这个c语言程序哪里有问题,我想写一个一元二次方程解答器。#include#inc...