(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; /*缩小间距值*/
}
}

==================================================================

下面讲js的数组排序sort方法:

sort的概念:

返回一个元素已经进行了排序的 Array 对象。
arrayobj.sort(sortfunction)
参数
arrayObj
必选项。任意 Array 对象。
参数:sortFunction

  可选项。是用来确定元素顺序的函数的名称。如果这个参数被省略,那么元素将按照 ASCII 字符顺序进行升序排列。

  sort 方法将 Array 对象进行适当的排序;在执行过程中并不会创建新的 Array 对象。

  如果为 sortfunction 参数提供了一个函数,那么该函数必须返回下列值之一:

  负值,如果所传递的第一个参数比第二个参数小。

  零,如果两个参数相等。

  正值,如果第一个参数比第二个参数大。

  以上的方法在一维的排序还是很方便的,但像SQL语句中的ORDER BY 一样的,因此arrayObject.sort( sortFunction )的排序功能还是很强大的,终于能够实现了SQL语句中的ORDER BY 一样的功能。

sort的的应用:

sort();

sort(function(a,b){ return a-b; });

sort(function(a,b){ return a.localeCompare(b) });

sort(function(){ return Math.random()>0.5?-1:1; });

sort(function(a,b){ return a.indexOf(str)==-1?1:-1; });

测试数据:

var y=new Array( 36000 , 500 , 10100 );
y.sort(function(a,b){ return a-b; });
alert(y);

转载于:https://www.cnblogs.com/backuper/archive/2009/01/05/1369498.html

c语言数组五种排序法:bubble,choise,quick,insert,shell 和js 数组排序sort的区别相关推荐

  1. c语言几种排序方法的比较,基于C语言的几种排序方法比较.doc

    基于C语言的几种排序方法比较.doc 基于C语言的几种排序方法比较 [摘要]文章对c语言中的冒泡排序法.选择排序法.插入排序法进行比较讨论,以试图找出最佳排序方法. [关键词]c语言;排序方法;比较 ...

  2. 常见的五种排序,冒泡排序,选择排序,插入排序,并归排序,快速排序

    冒泡排序 冒泡排序介绍: 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地跑过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小)那么它就会按照大到小的 ...

  3. 五种排序方式gif展示【python】

    简述 有五种排序方式. 文章目录 简述 排序 简单排序 冒泡排序 选择排序 归并排序 快速排序 排序 简单排序 import numpy as np import matplotlib.pyplot ...

  4. java中的五种排序方法_用Java排序的五种有用方法

    java中的五种排序方法 Java排序快速概述: 正常的列表: private static List VEGETABLES = Arrays.asList("apple", &q ...

  5. C语言冒泡法和选择排序法

    C语言冒泡法和选择排序法 1.冒泡法代码 #include<stdio.h> int main() {int a[3];int p,i,tmp;for(i=0;i<3;i++)sca ...

  6. 计算机专业学不会C语言的 N 种死法!赶紧看看,你中了几条?

    以下是计算机专业学不会C语言的 N 种死法!学生党请进,老师们请绕路!(以免看到你学生学C语言时的真实情况) 1.听说明天就要开始学习C语言了,晚上睡不着觉兴奋死! 2.在C语言课上,老师讲得口沫横飞 ...

  7. 数组的常用五种排序算法

    目录 一.排序算法介绍 二.算法代码实现 1.选择法排序 2.冒泡法排序 3.交换法排序 4.插入法排序 5.折半法排序 一.排序算法介绍 1.选择法排序 选择法排序在排序过程中一共需要进行 n(n- ...

  8. LeetCode--88.合并两个有序数组(插入法,排序法)

    合并两个有序数组(C, Python) 1. 题目描述 2. 题目分析 3. C语言实现 4. Python语言实现 1. 题目描述 难度:简单 2. 题目分析 这道题比较简单,实现方法有两种: 插入 ...

  9. C语言常用8种排序方法耗时测试

    最近项目中用到排序算法,于是研究了一下常用的8种排序算法.由于是在8位单片机上使用,所以对内存和时间要求比较高,最好是不额外占空间,同时耗时较短.于是对常用的8中算法耗时做了个测试.通过LED的亮灭来 ...

  10. 5个流水灯c语言程序,五种编程方式实现流水灯的单片机C程序

    <五种编程方式实现流水灯的单片机C程序>由会员分享,可在线阅读,更多相关<五种编程方式实现流水灯的单片机C程序(5页珍藏版)>请在人人文库网上搜索. 1.五种编程方式实现流水灯 ...

最新文章

  1. Kira同学:斩获百度校招提前批offer备战细节全揭秘
  2. element table 表格设置max-height 没有出现滚动条,多渲染了一列。
  3. (转载)用oracle触发器对记录表增加记录的问题
  4. ArcGIS实验教程——实验三十六:ArcGIS Python脚本的巧妙使用
  5. c语言程序stm8s,stm8s的c语言编程例程
  6. nginx设置跨域问题
  7. Java实验9 T1.往文件中写入1万个随机数,比较用时的多少
  8. semg特征提取matlab zc,一种融合小波包和双谱分析的肌电信号特征提取方法与流程...
  9. python身份证号码共18位_涨姿势:用Python完成15位18位身份证的互转
  10. [WebSocket]使用WebSocket实现实时多人答题对战游戏
  11. 太极限了,JDK的这个BUG都能被我踩到!
  12. java 异步上传一张图片_java异步上传图片
  13. 魔兽转移账号的服务器,《魔兽世界》那些区能进行免费角色转移服务 安苏、死亡之翼服务器免费角色转移服务现已开放...
  14. 探究磁盘碎片产生的原因及预防办法
  15. 面试题-Java基础(四)-反射
  16. 【API】聊天机器人接口
  17. 虚拟机VMware9上网设置
  18. Visual Studio强大的帮助工具--Resharper安装与使用
  19. 物联网——zigbee(cc2530)
  20. 教学管理系统java源代码_教学管理系统java源代码.doc

热门文章

  1. WebView打不开或者显示异常可能原因
  2. iPhone6 6p 7 7p屏幕适配,切图准则
  3. 超大气自适应北漂鱼VP视频解析源码+带后台管理
  4. Dropping Balls, UVa679
  5. CSFB和SRVCC
  6. justinmind夜话:程序员眼中的原型设计视频教程之书到用时方恨少
  7. 请别再使用 SimpleDateFormat 格式化时间了,DateTimeFormatter 更出色!
  8. 抖音 触摸精灵_touchscale.co在哪里玩 抖音爆火触摸称重游戏是什么
  9. python:网络爬虫之遍历单个域名获取电影名称及年份
  10. 短视频“音频化”,音乐“视频化”