1、交换排序

a、冒泡排序

 #include <stdio.h>
int main() {
int a[] = {, , , , }, i, j, t;
for(i=; i>=; i--) {
for(j=; j<i; j++) {
if(a[j]>a[j+]) {
t=a[j];
a[j]=a[j+];
a[j+]=t;
}
}
}
for(i=;i<;i++){
printf("%d ",a[i]);
}
}

分析:

(1)冒泡排序的思路是每次比较相邻的两个数,把最大的数放到最后

(2)上面的代码效率较低,因为若数组已经有序的话循环不会停,可加个变量解决

(3)效率:最好O(N),最差O(N2);与逆序对个数成正比

(4)优点:操作简单,适应性好,如数据放在单向链表中时;稳定

 #include <stdio.h>
int main() {
int a[] = {, , , , }, i, j, t,flag;
for(i=; i>=; i--) {
flag = ;
for(j=; j<i; j++) {
if(a[j]>a[j+]) {
t=a[j];
a[j]=a[j+];
a[j+]=t;
flag = ;
}
}
if(flag==) break;
}
for(i=;i<;i++){
printf("%d ",a[i]);
}
}

一种错误的写法:

 #include <stdio.h>
int main() {
int a[] = {, , , , }, i, j, t;
for(i=; i<; i++) {
for(j=; j<-i; j++) {
if(a[j]>a[j+]) {
t=a[j];
a[j]=a[j+];
a[j+]=t;
}
}
}
for(i=;i<;i++){
printf("%d ",a[i]);
}
}

分析:第5行的5应为4

2、插入排序

 #include <stdio.h>
int main() {
int a[] = {, , , , }, i, j, t;
for (i = ; i < ; i++) {
t = a[i];
j = i - ;
while (j >= && t > a[j]) {
a[j+] = a[j];
j--;
}
a[j+] = t;
}
}

分析:

(1)插入排序的原理类似摸扑克牌,如扑克按升序排列,每次摸到一张新牌后,都要与现有的所有牌做比较然后插到合适的位置。如果你一开始摸牌就这样做的话,你手中的牌就一直是有序的,只需把每次的新牌插到合适位置即可

(2)t就是新牌,while中是新牌与老牌比较的过程,i和j是双指针,一个指向新牌,一个遍历老牌

(3)边界条件,如果新牌比老牌都小,j最后等于-1,11行就是把新牌放到a0位置

(4)效率:最好O(N),最差O(N2);与逆序对个数成正比

(5)优点:稳定

3、选择排序

a、堆排序

4、归并排序

优点:快

缺点:需要额外空间,一般用于外排序

c——简单排序的更多相关文章

  1. Java数据结构和算法之数组与简单排序

    一.数组于简单排序 数组 数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信 ...

  2. 简单排序算法 C++类实现

    简单排序算法: 冒泡排序 插入排序 选择排序 .h代码: // // SortClass.h // sort and selection // // Created by wasdns on 16/1 ...

  3. iOS简单排序--字母排序、NSDictionary排序

    // 数组用系统方法compare做字母的简单排序 NSArray *oldArray = @[@"bac",@"bzd",@"azc",@ ...

  4. 简单排序算法设计(Java)

    总共有八种排序算法,还是慢慢看吧 1.简单排序算法 简单排序算法就是设置标兵,逐个比较数,然后查找插入位置,插入 public static void p(int[] a){ for(int i=0; ...

  5. Java数据结构和算法 - 简单排序

    Q: 冒泡排序? A: 1) 比较相邻的元素.如果第一个比第二个大,就交换它们两个; 2) 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数; 3) 针 ...

  6. 《Algorithms算法》笔记:元素排序(1)——简单排序

    <Algorithms算法>元素排序(1)——简单排序 Algorithms算法元素排序1简单排序 排序问题 1 回调函数 2Java中回调函数的路线图 3 全序 4 Comparable ...

  7. JavaScript中简单排序总结

    JavaScript中简单排序总结 冒泡排序 经典排序算法, 双重for循环 在第二个for循环的时候, j < arr.len -1 -i , 这一步的优化很重要 function bullS ...

  8. 《java数据结构与算法》系列之“简单排序"-冒泡,选择,插入

    好几天又没写,因为这几天很闲,平时忙的时候自己再累都不会睡着,但是呢这没事了,照理说应该是不瞌睡了,结果还睡着了. 所以说,人很贱.也验证了一句话,没有目标的人其实最无聊.人一定要有自己的工作,这工作 ...

  9. golang slice 简单排序

    原文链接:https://www.jianshu.com/p/603be4962a62 demo package main import ( "fmt" "sort&qu ...

  10. 【Java数据结构与算法】简单排序、二分查找和异或运算

    简单排序 选择排序 概念 首先,找到数组中最小的那个元素,其次,把它和数组的第一个元素交换位置(如果第一个元素就是最小的元素那么它就和自己交换).再次,在剩下的元素中找到最小的元素,将它与数组的第二个 ...

随机推荐

  1. AJax提交表单数据到后台springmvc接收

    第一种方法直接用serialize()方法 function insert(){ $.ajax({ type:"POST", url:"${pageContext.req ...

  2. Failed to start bean 'stompBrokerRelayMessageHandler'; nested exception is java.lang.NoClassDefFoundError: reactor/io/codec/Codec

    最新版本的Spring需要reactor 2.0,看看你的POM有一个明确的1.1.6依赖. 解决: <dependency> <groupId>org.projectreac ...

  3. js --"说声爱你不容易"

    <div class="tit"><label>yourName:</label><input type="text" ...

  4. python操作samba

    最近在部署完xxl-job后,陆续将一些日常性执行的python脚本迁移到上面去:其中部分脚本涉及到对samaba的操作,先后尝试了pysmb.fs.smbfs.pysmbclient pysmb 安 ...

  5. [2003_p1]乒乓球

    一道因为输出不一样疯狂超时的题目(是我太菜,但是我jio得代码是ok的) 题目描述 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及.其中11分制改革引起了很大的 ...

  6. ABP异常处理

    1.编译器错误消息: CS0012: 类型“System.Object”在未被引用的程序集中定义.必须添加对程序集“System.Runtime, Version=4.0.0.0, Culture=n ...

  7. 什么是 SaaS (Software as a Service)

    什么是SaaS (Software as a service ) 把软件作为一个服务.SaaS是一种cloud-based 和通过Internet提供软件的模式,用户不用再购买软件,而改用向提供商租用 ...

  8. Note of Jieba

    Note of Jieba jieba库是python 一个重要的第三方中文分词函数库,但需要用户自行安装. 一.jieba 库简介 (1) jieba 库的分词原理是利用一个中文词库,将待分词的内容 ...

  9. jar包是干什么用的

    1.JAR(Java ARchive)是将一系列文件到单个压缩文件里,就象Zip那样.但是,同Java中其他任何东西一样,JAR文件是跨平台的,所以不必关心涉及具体平台的问题.2.jar包就是别人已经 ...

  10. vmware10.0.1安装redhat linux6.2每次启动vm崩溃问题解决!

    最近在学习linux技术,安装了一套redhat linux6.2的环境,里面有软件若干,wmare用的是10.0.1的,最近每次出现登陆界面,输入root登陆后,wm就报错vmui不可恢复错误MEM ...