[几种经典排序算法优劣比较的C程序实现]一、低级排序算法1.选择排序 (1)排序过程 给定一个数值集合,循环遍历集合,每次遍历从集合中选择出最小或最大的放入集合的开头或结尾的位置,下次循环从剩余的元素集合中遍历找出...+阅读
简单的有关排序的算法设计问题
第一个
return abs(vals[1]-vals[n])
复杂度O(1)
第二个
min=vals[1]
max=vals[1]
for i=1 to n
if vals[i]>max
max=vals[i]
else if vals[i]<min
min=vals[i]
return max-min
复杂度O(n)
第三个
function dig(first,last):{min,max}
if first+1>=last
return {min(vals[first],vals[last]),max(vals[first],vals[last])}
var t1=dig(first,(first+last)/2)
var t2=dig((first+last)/2+1,last)
return {min(t1.min,t2.min),max(t1.max,t2.max)}
函数复杂度O(n) 此题不适合用分治法
var t=dig(1,n)
return t.max-t.min
C语言课程设计排序
#include "stdio.h"
#include "conio.h"
main()
{ long a=0; int b[5];
printf("plese input a 5bit number:");
scanf("%d",&a);
b[0]=a/10000;
b[1]=a/1000%10;
b[2]=a/100%10;
b[3]=a/10%10;
b[4]=a%10;
rank(b) ;
getch();
}
int rank(int c[5])
{ int i,j,t;
for(i=0;i<4;i++)
{for(j=i+1;j<5;j++)
if(c[i] {t=c[i]; c[i]=c[j]; c[j]=t; } } for(i=0;i<=4;i++) printf("%d",c[i]); } //首先是用邻接表表视图,下面是邻接表的数据结构定义 const int MaxVertexNum = {图的最大顶点数,要大于等于具体图的顶点数n}; const int MaxEdgetNum = {图的最大边数,要大于等于具体图的边数e}; typedef VertexType vexlist[MaxVertexNum]; //定义vexlist为存储顶点信息的数组类型 struct edgenode //定义邻接表中的边结点类型 { int adjvex; //邻接点域 int weight; //权值域 edgenode* next;//指向下一个边结点的链域 }; typedef edgenode* adjlist[MaxVertexNum]; //定义adjlist为存储n个表头指针的数组类型 //通过从键盘上输入的n个顶点信息和e条有向边信息建立顶点数组GV和邻接表GL void Create2(vexlist GV, adjlist GL, int n, int e) { int i,j,k; //建立顶点数组 coutfour(i = 0; icin>>GV[i]; //初始化邻接表 for(i=0; iGL[i] = NULL; //建立邻接表 coutfor(k=1; k{ //输入一条边 cin>>i>>j; //分配新结点 edgenode* p = new edgenode; //将j值赋给新结点的邻接点域 p->adjvex = j; //将新结点插入到邻接表表头 p->next = GL[i]; GL[i] = p; } } //对邻接表GL表示的有n个顶点的有向图拓扑排序 void TopoSort(adjlist GL, int n) { int i,j,k,top,m=0; //m统计拓扑排序中的顶点数 edgenode* p; //定义存储图中每个顶点入度的一维整型数组d int* d = new int[n]; //初始化数组d中每个元素值为0 for(i=0; id[i] = 0; //利用数组d记录每个顶点的入度 for(i = 0; i { p = GL[i]; while(p != NULL) { j = p->adjvex; d[j]++; p = p->next; } } //初始化用于链接入度为0的栈顶指针top为-1 top = -1; //建立初始栈 for(i = 0; i if(d[i] == 0) { d[i] = top; top = i; } //每循环一次删除一个顶点及所有出边 while(top != -1) { j = top; //j的值为一个入度为0的顶点序号 top = d[top]; //删除栈顶元素 coutm++; //输出顶点个数加1 p = GL[j]; //p指向邻接点表的第一个结点 while(p != NULL) { k = p->adjvex; d[k]--; if( d[k] == 0) //把入度为0的元素进栈 { d[k] = top; top = k; } p = p->next; } } coutif(mcoutdelete []d; } 排序法 平均时间 最差情形 稳定度 额外空间 备注 冒泡 O(n2) O(n2) 稳定 O(1) n小时较好 交换 O(n2) O(n2) 不稳定 O(1) n小时较好 选择 O(n2) O(n2) 不稳定 O(1) n小时较好 插入 O(n2) O(n2) 稳定 O(1) 大部分已排序时较好 基数 O(logRB) O(logRB) 稳定 O(n) B是真数(0-9),R是基数(个十百) Shell O(nlogn) O(ns) 1 快速 O(nlogn) O(n2) 不稳定 O(nlogn) n大时较好 归并 O(nlogn) O(nlogn) 稳定 O(1) n大时较好 堆 O(nlogn) O(nlogn) 不稳定 O(1) n大时较好 延伸阅读: 数据结构堆排序算法#includevoid adjust(int *list,const int root,const int n); void HeapSort(int *list,const int n) { int i=0; for(i=n/2;i>=1;i--) adjust(list,i-1,n); int t=list[n]... 快速排序算法问题看看大家的思路/*刚看了下算法导论,写了一个,感觉效率还可以,你看看 */ #include <stdio.h> static int a[8] = {3, 7, 2, 8, 4, 5, 3, 9}; void swap (int *m, int *n) { int temp = *m; *m... 如何在现代C中实现经典排序算法冒泡法大家都较熟悉。其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a[i],则交换它们,一直比较到a[n]。同理对a[1],a[2],...a[n-1]处理,即完成排序。下面列出其代码:void b... C语言的快速排序的算法是什么啊快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一... C语言实现七种排序算法的演示代码!(1)“冒泡法” 冒泡法大家都较熟悉。其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a[i],则交换它们,一直比较到a[n]。同理对a[1],a[2],...a[n-1]处理,即完成排序。下面列... 急!C语言程序数据结构排序算法的问题#include"stdio.h" #include"stdlib.h" #include "string.h" #define Max 100 //假设文件长度 typedef struct{ //定义记录类型 int key; //关键字项 }RecType; typedef RecType Se... C语言高效排序算法的原理及代码快速排序是通过分治的思想来实现的。即找一个 中间数,让小于这个数字的放在他左边,大于这个数字的放在右边!然后逐渐放小! 以升序为例: int qsort(ArrayStule *aS,int low,int hi... 排序算法c语言n个数字的排序我近期做练习的时候专门为排序做了一个c程序,你看看怎么样,包括了很多排序方法 #include#include#include#define LEN 10 //初始化数组 void init(int *arr,int len); //打印数... 排序算法的排序算法排序的算法有很多,对空间的要求及其时间效率也不尽相同。下面列出了一些常见的排序算法。这里面插入排序和冒泡排序又被称作简单排序,他们对空间的要求不高,但是时间效率却不稳...数据结构课设题目:拓扑排序算法
数据结构课程设计的各种排序算法的综合比较哪位大神帮写一下