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. 《程序设计入门——C语言》翁恺老师 第一周编程练习记录

    1 输出“Hello World”(5分) 题目内容: 请输出一行,内容为 Hello World 请注意大小写. 由于这一周只是简单地介绍了C程序的基本框架,还不能做很多事情,甚至还不能做数据的输入 ...

  2. redis学习——数据持久化

    一.概述 Redis的强大性能很大程度上都是因为所有数据都是存储在内存中的,然而当Redis重启后,所有存储在内存中的数据将会丢失,在很多情况下是无法容忍这样的事情的.所以,我们需要将内存中的数据持久 ...

  3. spring MVC 入门:

    概述: MVC: M model 模型,除控制和视图以外,都可以成为模型. V view 视图,JSP,HTML,ASP,PHP,XHTML,FREEMARK,JSF,直接与用户做交互的资源. C c ...

  4. TreeSet VS HashSet VS LinkedHashSet; TreeMap VS HashMap VS LinkedHashMap

    From online resources Set HashSet is much faster than TreeSet (constant-time versus log-time for mos ...

  5. OpenStack-Queens版本缓存yum源的问题

    安装OpenStack仓库出现问题 yum install centos-release-openstack-queens -y 执行 sed -i 's/$contentdir/centos/g' ...

  6. while循环与 for循环,函数定义与调用

    import turtle turtle.setup(600,400,0,0) turtle.bgcolor('red') turtle.color('yellow') turtle.fillcolo ...

  7. MySQL免编译二进制包安装简记

    相比较于MySQL的源代码安装来说.免编译二进制包的速度实在是快了太多,而且性能损失也不是很大,同时具有一定的定制性.所以,如果没有特殊的 需求,尽量用MySQL免编译二进制包来安装MySQL. 1. ...

  8. 前段学习的roadmap

    引自http://www.cnblogs.com/IMxinu/p/9693041.html

  9. URL路由系统-命名空间

    命名空间 1.工程Django下的urs.py from django.conf.urls import url,include from django.urls import path,re_pat ...

  10. python 第三方库 dateutil.parser 使用说明

    dateutil.parser 顾名思意 就是与日期相关库里的一个日期解析器 能够将字符串 转换为日期格式 我们来看看具体的用法 首先 需要在线安装 pip install python-dateut ...