- 浏览: 91024 次
- 性别:
- 来自: 鞍山
最新评论
-
mqlfly2008:
这个时钟会不会在页面访问后,客户端调节了时间,从而让时间不准确 ...
js取服务器时间显示时钟 -
chendu135:
这个挺好,可不可以在match()里面判断下一,除了字母或者汉 ...
js获取字符串长度(区分中英文)
让我们先定义一个整型数组a[n],下面用五种方法对其从小到大排序。
(1)“冒泡法”
冒泡法大家都较熟悉。其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a[i],则交换它们,一直比较到a[n]。同理对a[1],a[2],...a[n-1]处理,即完成排序。下面列出其代码:
冒泡法原理简单,但其缺点是交换次数多,效率低。
下面介绍一种源自冒泡法但更有效率的方法“选择法”。
(2)“选择法”
选择法循环过程与冒泡法一致,它还定义了记号k=i,然后依次把a[k]同后面元素比较,若a[k]>a[j],则使k=j.最后看看k=i是否还成立,不成立则交换a[k],a[i],这样就比冒泡法省下许多无用的交换,提高了效率。
选择法比冒泡法效率更高,但说到高效率,非“快速法”莫属,现在就让我们来了解它。
(3)“快速法”
快速法定义了三个参数,(数组首地址*a,要排序数组起始元素下标i,要排序数组结束元素下标j). 它首先选一个数组元素(一般为a[(i+j)/2],即中间元素)作为参照,把比它小的元素放到它的左边,比它大的放在右边。然后运用递归,在将它左,右两个子数组排序,最后完成整个数组的排序。下面分析其代码:
(4)“插入法”
插入法是一种比较直观的排序方法。它首先把数组头两个元素排好序,再依次把后面的元素插入适当的位置。把数组元素插完也就完成了排序。
(5)“shell法”
shell法是一个叫 shell 的美国人与1969年发明的。它首先把相距k(k>=1)的那几个元素排好序,再缩小k值(一般取其一半),再排序,直到k=1时完成排序。下面让我们来分析其代码:
上面我们已经对几种排序法作了介绍,现在让我们写个主函数检验一下。
#include<stdio.h>
/*下面的"..."代表函数体,自己加上去!*/
void bubble(int *a,int n)
{
...
}
void choise(int *a,int n)
{
...
}
void quick(int *a,int i,int j)
{
...
}
void insert(int *a,int n)
{
...
}
void shell(int *a,int n)
{
...
}
/*为了打印方便,我们写一个printf 吧。*/
void print(int *a,int n)
{
int i;
for(i=0;i<n;i++)
printf("%5d",a[i]);
printf("\n");
}
本文来自CSDN博客http://blog.csdn.net/hardwin/archive/2008/04/09/2270816.aspx
(1)“冒泡法”
冒泡法大家都较熟悉。其原理为从a[0]开始,依次将其和后面的元素比较,若a[0]>a[i],则交换它们,一直比较到a[n]。同理对a[1],a[2],...a[n-1]处理,即完成排序。下面列出其代码:
void bubble(int *a,int n) /*定义两个参数:数组首地址与数组大小*/ { int i,j,temp; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) /*注重循环的上下限*/ if(a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } }
冒泡法原理简单,但其缺点是交换次数多,效率低。
下面介绍一种源自冒泡法但更有效率的方法“选择法”。
(2)“选择法”
选择法循环过程与冒泡法一致,它还定义了记号k=i,然后依次把a[k]同后面元素比较,若a[k]>a[j],则使k=j.最后看看k=i是否还成立,不成立则交换a[k],a[i],这样就比冒泡法省下许多无用的交换,提高了效率。
void choise(int *a,int n) { int i,j,k,temp; for(i=0;i<n-1;i++) { k=i; /*给记号赋值*/ for(j=i+1;j<n;j++) if(a[k]>a[j]) k=j; /*是k总是指向最小元素*/ if(i!=k) { /*当k!=i是才交换,否则a[i]即为最小*/ temp=a[i]; a[i]=a[k]; a[k]=temp; } } }
选择法比冒泡法效率更高,但说到高效率,非“快速法”莫属,现在就让我们来了解它。
(3)“快速法”
快速法定义了三个参数,(数组首地址*a,要排序数组起始元素下标i,要排序数组结束元素下标j). 它首先选一个数组元素(一般为a[(i+j)/2],即中间元素)作为参照,把比它小的元素放到它的左边,比它大的放在右边。然后运用递归,在将它左,右两个子数组排序,最后完成整个数组的排序。下面分析其代码:
void quick(int *a,int i,int j) { int m,n,temp; int k; m=i; n=j; k=a[(i+j)/2]; /*选取的参照*/ do { while(a[m]<k&&m<j) m++; /* 从左到右找比k大的元素*/ while(a[ n]>k&&n>i) n--; /* 从右到左找比k小的元素*/ if(m<=n) { /*若找到且满足条件,则交换*/ temp=a[m]; a[m]=a[n]; a[n]=temp; m++; n--; } }while(m<=n); if(m<j) quick(a,m,j); /*运用递归*/ if(n>i) quick(a,i,n); }
(4)“插入法”
插入法是一种比较直观的排序方法。它首先把数组头两个元素排好序,再依次把后面的元素插入适当的位置。把数组元素插完也就完成了排序。
void insert(int *a,int n) { int i,j,temp; for(i=1;i<n;i++) { temp=a[i]; /*temp为要插入的元素*/ j=i-1; while(j>=0&&temp<a[j]) { /*从a[i-1]开始找比a[i]小的数,同时把数组元素向后移*/ a[j+1]=a[j]; j--; } a[j+1]=temp; /*插入*/ } }
(5)“shell法”
shell法是一个叫 shell 的美国人与1969年发明的。它首先把相距k(k>=1)的那几个元素排好序,再缩小k值(一般取其一半),再排序,直到k=1时完成排序。下面让我们来分析其代码:
void shell(int *a,int n) { int i,j,k,x; k=n/2; /*间距值*/ while(k>=1) { for(i=k;i<n;i++) { x=a[i]; j=i-k; while(j>=0&&x<a[j]) { a[j+k]=a[j]; j-=k; } a[j+k]=x; } k/=2; /*缩小间距值*/ } }
上面我们已经对几种排序法作了介绍,现在让我们写个主函数检验一下。
#include<stdio.h>
/*下面的"..."代表函数体,自己加上去!*/
void bubble(int *a,int n)
{
...
}
void choise(int *a,int n)
{
...
}
void quick(int *a,int i,int j)
{
...
}
void insert(int *a,int n)
{
...
}
void shell(int *a,int n)
{
...
}
/*为了打印方便,我们写一个printf 吧。*/
void print(int *a,int n)
{
int i;
for(i=0;i<n;i++)
printf("%5d",a[i]);
printf("\n");
}
本文来自CSDN博客http://blog.csdn.net/hardwin/archive/2008/04/09/2270816.aspx
发表评论
-
(转)电脑开机报警说明
2011-11-11 10:31 1095电脑开机启动时听到机箱小喇叭发出的各种不同的“嘟”声,其实这是 ... -
(转)win xp启动蓝屏代码说明
2011-11-11 10:11 1230一、0X0000000A 这个蓝屏代码和硬件无关,是驱 ... -
word报错,需要进入安全模式才能启动
2011-03-21 15:04 1102一、问题原因:word只能用安全模式才能打开双击word文件后 ... -
解决软件安装“无法使用此产品的安装源,请确认安装源存在并且你可以访问它”
2011-03-21 15:01 7169有时候,我安装某些软件的时候,会出现以下信息“无法使用此产 ... -
用javascript 判断IE窗口是否打开
2010-10-28 17:38 1472点击父页面上的按钮,打开一个新的页面(子页面),如果子页 ... -
IE与FF兼容在JS方面要注意的一些问题
2010-10-13 09:09 880关于IE、Firefox、Opera页 ... -
将MSSQL中的表数据导出为SQL语句
2010-10-12 16:11 2669drop proc proc_insert go crea ... -
js只能输入数字和小数点
2010-09-21 16:58 10551 第一个输入必须是数字,不能是小数点。例如.111 2 不能 ... -
css控制打印内容样式
2010-08-26 14:01 958<style type="text/css ... -
java读写properties文件(转)
2010-06-22 18:06 723直接代码,注释比较详 ... -
(转)软件界面设计经验
2010-06-12 10:30 866在我的记忆中,很多项 ... -
(转)IDEA快捷键
2010-06-12 10:25 759在使用InelliJ IDEA的过程中,通过查找资料以及一些自 ... -
iframe高度自适应(转载)
2010-05-11 15:52 886正在踌躇的时候发现下面的这段代码,终于得意解决。苦于对js没有 ... -
PHP5.3.2+APACHE2.2
2010-04-27 23:39 897Apache的安装与配置 打开apache官方网站 http ... -
可编辑下拉框
2010-04-07 08:24 1571可编辑的下拉框,由input和select组合成,将slele ... -
EditPlus配置JAVA开发环境
2010-03-24 17:47 1032初学者更适合使用文本编辑软件来学习Java,对Java有一定认 ... -
DIV仿frame框架
2010-03-24 13:50 17282行2列 <!DOCTYPE html PUBLIC & ... -
JS弹出窗口
2010-03-24 11:18 901<!DOCTYPE html PUBLIC " ... -
js分页代码
2010-03-24 10:47 2657<!doctype html public " ... -
div居中的一种方法
2010-03-23 21:32 1099以前用表格布局时设置网页居中非常方便,把表格对齐方式设 ...
相关推荐
本资源“常用C语言排序算法试验”聚焦于C语言实现的各种常见排序算法,是提升编程技能和理解算法原理的重要实践。 排序算法是计算机科学中的基础组成部分,它在数据处理、数据库管理和许多其他应用中起着关键作用。...
在C语言中,排序算法是学习程序设计的一个重点问题,因此,本文将对几种常用的C语言排序算法进行详细解析。 首先,顺序比较排序法是一种基本的排序算法。它的核心思想是通过多趟比较和交换,逐步将数组中的元素按照...
插入排序算法同样是基于C语言的一种常用排序算法。插入排序的基本思想是:把待排序的序列分为已排序和未排序两部分,每次将一个未排序的元素,按照其大小插入到已排序序列中的适当位置,直到所有元素都被插入。插入...
本资源提供了各种常用排序算法的C语言实现,源自严蔚敏的经典教材《数据结构》。下面将详细介绍这些排序算法及其在C语言中的实现原理。 1. 冒泡排序(Bubble Sort) 冒泡排序是最基础的排序方法,通过不断交换相邻...
本项目旨在实现并比较六种经典的排序算法——直接插入排序、折半插入排序、起泡排序、简单选择排序、堆排序以及2-路归并排序,使用C语言编程。为了全面评估这些算法,我们将在一组随机生成的30000个整数上运行它们,...
一些常用排序算法的C语言实现,包括直接选择排序,希尔排序,直接插入排序,快速排序,归并排序,冒泡排序,堆排序
C语言常用排序算法 在计算机科学中,排序算法是指将一组无序的数据按照某种顺序排列的方法。排序算法是编程语言中非常重要的一部分,特别是在C语言中。下面将介绍几种常用的排序算法,包括选择排序、插入排序等。 ...
本文将深入探讨标题"常用排序算法java演示"中涉及的知识点,包括排序算法的原理、Java实现方式以及其在实际应用中的图形演示。 首先,让我们逐一了解几种常见的排序算法: 1. **冒泡排序(Bubble Sort)**:这是一...
个人原创总结的常用排序算法C语言示例代码解说PDF,可以动态输出排序过程,以便理解排序算法的主旨思想。包含有直接插入排序,折半插入排序,2路直接插入排序,起泡排序,简单选择排序,快速排序,堆排序,(希尔排序,归并...
在编程世界中,C语言是一种基础且强大的编程语言,它被广泛用于系统编程、软件开发以及各种算法实现,包括排序算法。排序是计算机科学中一个基础但至关重要的概念,它涉及将一组数据按照特定顺序进行排列。在这个...
本资源"常用排序算法C语言实现"提供了一个实践平台,帮助学习者将理论知识转化为实际代码。 首先,让我们探讨几种常见的排序算法及其C语言实现: 1. **冒泡排序(Bubble Sort)**:冒泡排序是最基础的排序方法,...
C语言作为基础且广泛应用的编程语言,提供了实现各种排序算法的可能。以下将详细讲解标题和描述中提到的几种常见排序算法:插入排序、Shell排序以及堆排序。 1. 插入排序 插入排序是最直观的排序算法之一。它通过...
在编程领域,排序算法是计算机科学中的基础但至关重要的部分,尤其在C++这样的系统级编程语言中。本文将深入探讨C++实现的几种常见排序算法:冒泡排序、选择排序、插入排序、归并排序、快速排序以及堆排序。 1. **...
C语言常用排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。下面将对这些经典的排序算法进行详细介绍。 1. 冒泡排序(Bubble Sort) 冒泡排序是最简单的排序算法之一,通过不断交换相邻的...
在计算机科学领域,数据结构和排序算法是编程基础的重要组成部分,特别是对于C语言这样底层而强大的编程工具。本文将深入探讨“C语言数据结构内部排序算法及比较”这一主题,结合个人课程作业的经验,对一些核心概念...
2. **分组**:将所有记录按增量t分组,对每组使用直接插入排序算法排序。 3. **递减增量**:用下一个较小的增量重复上一步,直到增量为1,此时整个数组被完全排序。 希尔排序的关键在于增量序列的选择,不同的序列...
常用算法一 一、计数、求和、求阶乘等简单算法 此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。 例:计算 直到最后一项的绝对值小于1e-7时...
在计算机科学中,排序算法有很多种,今天我们将讨论C语言中常用的排序原理和算法。 一、稳定排序和非稳定排序 稳定排序和非稳定排序是两种不同的排序方法。稳定排序是指在排序过程中,所有相等的数经过某种排序...