`

常用排序算法——C实现

 
阅读更多


1.1 冒泡排序

[算法描述]

所给的N个数中,先拿第一个数来和第二个比较,然后让较大的一个排在后面(即如果N1>N2,则让N1与N2交换位置),然后又拿第二个数来和第三个数比较,又把较大的一个排在后面,如此往下做下去,直到第N-1个数和第N个数比较完后,最大的那个数就会被升到了最后面来.接下来又照同样的方法来把前N-1个数中最大的数排到第N-1的位置上,做到最后,整一列数都被排好了.不过下面的代码和上面描述的相反,是从后面开始比较的.

[源程序]

方案一:

for (i=1;i<=n-1;i++)

for(j=n;j>=i+1;j--)

if(a[j-1]>a[j]) //降序:a[j-1]<a[j]

{

k="a"[j-1];

a[j-1]=a[j];

a[j]=k;

}

方案二:

for (i=1;i<=n-1;i++)

for(j=i+1;j<=n;j++)

if (a[i]>a[j]) //降序:a[j-1]<a[j]

{

k="a"[i];

a[i]=a[j];

a[j]=k;

}

1.2 选择排序

[算法描述]

第一趟扫描所有数据,选择其中最小的一个与第一个数据互换;第二趟从第二个数据开始向后扫描,选择最小的与第二个数据互换;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程.

[源程序]

for (i=1;i<=n-1;i++)

{

k="i";

for(j=i+1;j<=n;j++)

if (a[j]<a[k]) k="j"; //降序:a[j]>a[k]

x="a"[i];

a[i]=a[k];

a[k]=x;

}

1.3 插入排序

[算法描述]

假设一个有序数组a有n个元素,现在要向a中插入一个元素x并且使数组a仍然有序列.

1.从左至右扫描数组a,记录下第一个大于(或小于)x的元素的下标,记为k;

2.如果k=0则向数组末尾插入x

否则:

(1)将a[k..n]的所有元素向右移动一位;

(2)a[k]:=x;

(3)n:=n+1.

[源程序]

void Insert(struct stack *s, int x)

{

inti,k;

k="0";

for(i=1;i<=s->top;i++)

if (x<s->data[i]) //降序:x>s.data[i]

{

k="i";

break;

}

if(k==0)

{

++s->top;

s->data[s->top]=x;

}

else

{

for (i=s->top;i>=k;i--) s->data[i+1]=s->data[i];

s->data[k]=x;

++s->top;

}

}

1.4 快速排序

[算法描述]

设有一无序数组a有n个元素.

1.以数组a的中点元素为参考值;

2.将中点左边大于(或小于)参考值的与中点右边小于(或大于)参考值的元素互换位置;

3.对中点左边的元素执行快排操作;

4.对中点右边的元素执行快排操作.

[源程序]

void QuickSort(int a[], int l, int r)

{

inti,j,Mid,k;

i="l";

j="r";

Mid="a"[(int)((l+r)/2)];

do

{

while (a[i]<Mid) ++i; //降序:a[i]>mid

while (Mid<a[j]) --j; //降序:mid>a[j]

if (i<=j)

{

k="a"[i];

a[i]=a[j];

a[j]=k;

++i;

--j;

}

} while(i<=j);

if(i<r) QuickSort(a,i,r);

if(l<j) QuickSort(a,l,j);

}

1.5 哈希排序

[算法描述]

首先建立一个很长的数组做Hash表,表中元素类型为布尔型,初始值为False.然后读入数据,把Hash表中下标等于这个数的元素赋值为True.然后:

for (i=1;i<=n;i++) //从小到大

if(Hash[i]) printf("%d ",i);

for (i=n;i>=1;i--) //从大到小

if(Hash[i]) printf("%d ",i);

[源程序]

/* init */

for (i=1;i<=100;i++) hash[i]=0;

/* sort */

for (i=1;i<=10;i++)

{

scanf("%d",&x);

Hash[x]=1;

}

/* output */

for(i=1;i<=100;i++) //从小到大

if(Hash[i]) printf("%d ",i);

for(i=100;i>=1;i--) //从大到小

if(Hash[i]) printf("%d ",i);


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/power721/archive/2009/08/30/4500696.aspx


分享到:
评论

相关推荐

    《妙趣横生的算法(C语言实现)》(杨峰 编著)

    《妙趣横生的算法(C语言实现)》可作为算法入门人员的教程,也可以作为学习过C语言程序设计的人士继续深造的理想读物,也可作为具有一定经验的程序设计人员巩固和提高编程水平,查阅相关算法实现和数据结构知识的参考...

    算法精解:C语言描述 PDF

    全书共分为三部分:部分首先介绍了数据结构和算法的概念,以及使用它们的原因和意义,然后讲解了数据结构和算法中最常用的技术——指针和递归,最后还介绍了算法的分析方法,旨在为读者学习这本书打下坚实的基础;...

    算法精解.C语言描述

    全书共分为三部分:部分首先介绍了数据结构和算法的概念,以及使用它们的原因和意义,然后讲解了数据结构和算法中最常用的技术——指针和递归,最后还介绍了算法的分析方法,旨在为读者学习这本书打下坚实的基础;...

    算法精解-c语言描述

    全书共分为三部分:第一部分首先介绍了数据结构和算法的概念,以及使用它们的原因和意义,然后讲解了数据结构和算法中最常用的技术——指针和递归,最后还介绍了算法的分析方法,旨在为读者学习这本书打下坚实的基础...

    算法精解:C语言描述中文版(高清)

    全书共分为三部分:第一部分首先介绍了数据结构和算法的概念,以及使用它们的原因和意义,然后讲解了数据结构和算法中最常用的技术——指针和递归,最后还介绍了算法的分析方法,旨在为读者学习这本书打下坚实的基础...

    C/C++常用算法手册.秦姣华(有详细书签).rar

    9.6.1 计算最大公约数算法——搌转相除法 287 9.6.2 计算最大公约数算法一一Stein算法 288 9.6.3 计算最大公约数示例 289 9.7 最小公倍数 290 9.8 素数 292 9.8.1 素数概述 292 9.8.2 计算素数算法 292 9.9 ...

    《算法精解:C语言描述》(Kyle Loudon[美] 著,肖翔、陈舸 译)

    全书共分为三部分:第一部分首先介绍了数据结构和算法的概念,以及使用它们的原因和意义,然后讲解了数据结构和算法中最常用的技术——指针和递归,最后还介绍了算法的分析方法,旨在为读者学习这本书打下坚实的基础...

    算法精解:C语言描述

    第一部分首先介绍了数据结构和算法的概念,以及使用它们的原因和意义,然后讲解了数据结构和算法中最常用的技术——指针和递归,最后还介绍了算法的分析方法,旨在为读者学习《算法精解:C语言描述》打下坚实的基础;...

    数据结构及应用——C语言描述(最终版本)

    本书系统地介绍了各种常用的数据结构以及排序、查找的各种算法,阐述了各种数据结构的逻辑关系、存储表示及运算操作,涵盖了研究生入学考试大纲的所有内容。全书采用C语言作为数据结构和算法的描述语言,并对C语言...

    算法精解(C语言描述)Kyle Loudon 机械工业出版

    全书共分为三部分:第一部分首先介绍了数据结构和算法的概念,以及使用它们的原因和意义,然后讲解了数据结构和算法中最常用的技术——指针和递归,最后还介绍了算法的分析方法,旨在为读者学习这本书打下坚实的基础...

    算法精解-经典算法书籍

    第一部分首先介绍了数据结构和算法的概念,以及使用它们的原因和意义,然后讲解了数据结构和算法中最常用的技术——指针和递归,最后还介绍了算法的分析方法,旨在为读者学习《算法精解:C语言描述》打下坚实的基础;...

    算法精解C描述

    全书共分为三部分:第一部分首先介绍了数据结构和算法的概念,以及使用它们的原因和意义,然后讲解了数据结构和算法中最常用的技术——指针和递归,最后还介绍了算法的分析方法,旨在为读者学习这本书打下坚实的基础...

    算法精解:C语言描述 chm 英文版

    全书共分为三部分:第一部分首先介绍了数据结构和算法的概念,以及使用它们的原因和意义,然后讲解了数据结构和算法中最常用的技术——指针和递归,最后还介绍了算法的分析方法,旨在为读者学习这本书打下坚实的基础...

    通俗易懂的啊哈C语言1

    第2节 Dijkstra算法——通过边实现松弛 155 第3节 Bellman-Ford——解决负权边 163 第4节 Bellman-Ford的队列优化 171 第5节 zui短路径算法对比分析 177 第7章 神奇的树 178 第1节 开启“树”之旅 179 第2...

    常用算法程序集(C语言描述)

    算法包括: 多项式运算,复数计算,随机数产生,矩阵运算,矩阵特征值和特征向量运算,线性代数方程组求解,非线性代数方程组求解,插值,数值积分,数值微分,排序,查找。

    C语言描述(中文),完整扫描版

    第一部分首先介绍了数据结构和算法的概念,以及使用它们的原因和意义,然后讲解了数据结构和算法中最常用的技术——指针和递归,最后还介绍了算法的分析方法,旨在为读者学习《算法精解:C语言描述》打下坚实的基础;...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    4.3 数据输入输出的概念及在 C 语言中的实现 54 4.4 字符数据的输入输出 54 4.4.1 putchar 函数(字符输出函数) 54 4.4.2 getchar函数(键盘输入函数) 55 4.5 格式输入与输出 55 4.5.1 printf 函数(格式输出函数...

    数据结构习题答案(全部算法)严蔚敏版

    9.8 有关排序算法的C语言源程序 9.9 多路归并用于外排序的简介 习题九 第10章 文件 10.1 文件的基本概念 10.1.1 文件 10.1.2 外存储器及信息特点 10.2 文件的组织 10.2.1 顺序文件 10.2.2 散列文件 10.2.3...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    4.3 数据输入输出的概念及在 C 语言中的实现 54 4.4 字符数据的输入输出 54 4.4.1 putchar 函数(字符输出函数) 54 4.4.2 getchar函数(键盘输入函数) 55 4.5 格式输入与输出 55 4.5.1 printf 函数(格式输出函数...

Global site tag (gtag.js) - Google Analytics