[几种经典排序算法优劣比较的C程序实现]一、低级排序算法1.选择排序 (1)排序过程 给定一个数值集合,循环遍历集合,每次遍历从集合中选择出最小或最大的放入集合的开头或结尾的位置,下次循环从剩余的元素集合中遍历找出...+阅读
Vb常用排序算法课设
Option Explicit
Dim Arry() As String
Private Sub Command1_Click()
Dim i As Long, j As Long
Dim x As String, y As String
i = 1
ReDim Preserve Arry(i) As String
Open App.Path & "\111.txt" For Input As #1
While Not EOF(1)
Line Input #1, Arry(i)
i = i + 1
ReDim Preserve Arry(i) As String
Wend
ReDim Preserve Arry(i - 1) As String
Close #1
For i = 1 To UBound(Arry)
For j = 1 To UBound(Arry)
If j < UBound(Arry) Then
If Val(Arry(j)) > Val(Arry(j + 1)) Then
x = Arry(j)
y = Arry(j + 1)
Arry(j) = y
Arry(j + 1) = x
End If
End If
Next
Next
Open App.Path & "\222.txt" For Output As #1
For i = 1 To UBound(Arry)
Print #1, Arry(i)
Next i
Close #1
End Sub
归并排序算法实现和比较2设计内容及要求:内容:实现两路归并排
到底几次移动还真不好说,因为下面的的方法中是把已排序的两个子数组拷贝出去在整合进来。三路MergeSort谁出的题?闲着蛋疼啊,二路的时间复杂度是T(n)=2T(n/2)+O(n),->T(n)=O(nlgn)。三路的时间复杂度是T(n)=3T(n/3)+O(n),->T(n)=O(nlgn)。复杂度没变,设计却复杂了。我不写了,你看着办吧 #include#includeint cmp = 0; int mv = 0; // [p..q,q+1..r] void Merge(int a[], int p, int q, int r) { int n1 = q - p + 1; int n2 = r - q; int *a1 = (int*)malloc(sizeof(int)*n1); if(!a1) { printf("malloc error! a1\n"); return; } int *a2 = (int*)malloc(sizeof(int)*n2); if(!a2) { printf("malloc error! a2\n"); free(a1); return; } int i, j, k; for(i = 0; i
数据结构的课程设计拓扑排序的算法
#include
int mat[105][105];/*存图的边*/
int indeg[105];/*存入度*/
int ans[105];/*结果*/
int top =0;
void main()
{
int n;/*图大小*/
int m;/*边个数*/
int i,j;
int a,b;
scanf("%d%d",&n,&m);
for(i=0;i for(i=0;i { scanf("%d%d",&a,&b); /*a到b有一条边,输入范围[0,n-1]*/ indeg[b]++; mat[a][b]=1; } while(top { for(i=0;i if(indeg[i]==0) { indeg[i]=-1; break; } j=i; ans[top++]=j; for(i=0;i if(mat[j][i]) mat[j][i]=0,--indeg[i]; } for(i=0;i printf("%d ",ans[i]); puts(""); } #include#include#define MAX_VEXTEX_NUM 20#define M 20#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define OK 1#define ERROR 0typedef int ElemType;typedef struct ArcNode{int adjvex;struct ArcNode *nextarc;}ArcNode;typedef struct VNode{int data;ArcNode *firstarc;}VNode,AdjList[MAX_VEXTEX_NUM];typedef struct{AdjList vertices;int vexnum, arcnum;}ALGraph;typedef struct //构件栈{ElemType *base;ElemType *top;int stacksize;}SqStack;void InitStack(SqStack *); //函数声明int Pop(SqStack *, ElemType *);void Push(SqStack *,ElemType );int StackEmpty(SqStack *);void CreatGraph(ALGraph *);void FindInDegree(ALGraph , int * );void TopologicalSort(ALGraph );void InitStack(SqStack *S)//初始化栈{S->base=(ElemType *)malloc(STACK_INIT_SIZE*sizeof(ElemType));if(!S->base){printf("memory allocation failed, goodbye");exit (1);}S->top=S->base;S->stacksize=STACK_INIT_SIZE;}int Pop(SqStack *S,ElemType *e)//出栈操作{if(S->top==S->base){return ERROR;}*e=*--S->top;//printf("%d\n",e);// return e;return 0;}void Push(SqStack *S,ElemType e)//进栈操作{if(S->top-S->base>=S->stacksize){S->base = (ElemType *)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(ElemType));if(!S->base){printf("memory allocation failed, goodbye");exit (1);}S->top = S->base+S->stacksize;S->stacksize+=STACKINCREMENT;}*S->top++=e;}int StackEmpty(SqStack *S)//判断栈是否为空{if(S->top==S->base)return OK;elsereturn ERROR;}void CreatGraph(ALGraph *G)//构件图{int m, n, i;ArcNode *p;printf("请输入顶点数和边数:");scanf("%d%d",&G->vexnum,&G->arcnum);for (i = 1; ivexnum; i++){G->vertices[i].data = i;G->vertices[i].firstarc = NULL;}for (i = 1; iarcnum; i++) //输入存在边的点集合{printf("\n请输入存在边的两个顶点的序号:");scanf("%d%d",&n,&m);while (nG->vexnum || mG->vexnum){printf("输入的顶点序号不正确 请重新输入:");scanf("%d%d",&n,&m);}p = (ArcNode*)malloc(sizeof(ArcNode));if (p == NULL){printf("memory allocation failed,goodbey");exit (1);}p->adjvex = m;p->nextarc = G->vertices[n].firstarc;G->vertices[n].firstarc = p;}printf("建立的邻接表为:\n"); //输出建立好的邻接表for(i = 1; ivexnum; i++){printf("%d",G->vertices[i].data);for(p = G->vertices[i].firstarc; p; p = p->nextarc)printf("%3d",p->adjvex);printf("\n");}}void FindInDegree(ALGraph G, int indegree[])//求入度操作{int i;for (i = 1; inextarc;}}}void TopologicalSort(ALGraph G) //进行拓扑排序{int indegree[M];int i, k, n;int count = 0;ArcNode *p;SqStack S;FindInDegree(G, indegree);InitStack(&S);for (i = 1; iadjvex;if (!(--indegree[k])){Push(&S,k);}}}printf("\n");if (count 延伸阅读: 数据结构堆排序算法#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语言高效排序算法的原理及代码快速排序是通过分治的思想来实现的。即找一个 中间数,让小于这个数字的放在他左边,大于这个数字的放在右边!然后逐渐放小! 以升序为例: int qsort(ArrayStule *aS,int low,int hi... c语言常用排序放法1稳定排序和非稳定排序 简单地说就是所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,我们就 说这种排序方法是稳定的。反之,就是非稳定的。 比如:一组数排序... 排序算法c语言n个数字的排序我近期做练习的时候专门为排序做了一个c程序,你看看怎么样,包括了很多排序方法 #include#include#include#define LEN 10 //初始化数组 void init(int *arr,int len); //打印数... 排序算法的排序算法排序的算法有很多,对空间的要求及其时间效率也不尽相同。下面列出了一些常见的排序算法。这里面插入排序和冒泡排序又被称作简单排序,他们对空间的要求不高,但是时间效率却不稳...课程设计实现拓扑排序算法