c——简单排序
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——简单排序的更多相关文章
- Java数据结构和算法之数组与简单排序
		
一.数组于简单排序 数组 数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信 ...
 - 简单排序算法 C++类实现
		
简单排序算法: 冒泡排序 插入排序 选择排序 .h代码: // // SortClass.h // sort and selection // // Created by wasdns on 16/1 ...
 - iOS简单排序--字母排序、NSDictionary排序
		
// 数组用系统方法compare做字母的简单排序 NSArray *oldArray = @[@"bac",@"bzd",@"azc",@ ...
 - 简单排序算法设计(Java)
		
总共有八种排序算法,还是慢慢看吧 1.简单排序算法 简单排序算法就是设置标兵,逐个比较数,然后查找插入位置,插入 public static void p(int[] a){ for(int i=0; ...
 - Java数据结构和算法 - 简单排序
		
Q: 冒泡排序? A: 1) 比较相邻的元素.如果第一个比第二个大,就交换它们两个; 2) 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数; 3) 针 ...
 - 《Algorithms算法》笔记:元素排序(1)——简单排序
		
<Algorithms算法>元素排序(1)——简单排序 Algorithms算法元素排序1简单排序 排序问题 1 回调函数 2Java中回调函数的路线图 3 全序 4 Comparable ...
 - JavaScript中简单排序总结
		
JavaScript中简单排序总结 冒泡排序 经典排序算法, 双重for循环 在第二个for循环的时候, j < arr.len -1 -i , 这一步的优化很重要 function bullS ...
 - 《java数据结构与算法》系列之“简单排序"-冒泡,选择,插入
		
好几天又没写,因为这几天很闲,平时忙的时候自己再累都不会睡着,但是呢这没事了,照理说应该是不瞌睡了,结果还睡着了. 所以说,人很贱.也验证了一句话,没有目标的人其实最无聊.人一定要有自己的工作,这工作 ...
 - golang slice 简单排序
		
原文链接:https://www.jianshu.com/p/603be4962a62 demo package main import ( "fmt" "sort&qu ...
 - 【Java数据结构与算法】简单排序、二分查找和异或运算
		
简单排序 选择排序 概念 首先,找到数组中最小的那个元素,其次,把它和数组的第一个元素交换位置(如果第一个元素就是最小的元素那么它就和自己交换).再次,在剩下的元素中找到最小的元素,将它与数组的第二个 ...
 
随机推荐
- PHP用post来进行Soap请求
			
最近调了一个Soap请求C# webservice的项目.网上坑不少. 使用原生的SoapClient库请求也是失败.只好用post来进行模拟了.代码贴出来,给大家参考一下. <?php nam ...
 - quartz任务调度框架与spring整合
			
Quartz是什么? Quartz 是一种功能丰富的,开放源码的作业调度库,可以在几乎任何Java应用程序集成 - 从最小的独立的应用程序到规模最大电子商务系统.Quartz可以用来创建简单或复杂的日 ...
 - Linux 虚拟文件系统概述
			
转自:http://blog.csdn.net/u011373710/article/details/70198080 文章梗概 本文首先以“尽量不涉及源代码”的方式讨论Linux虚拟文件系统的存在的 ...
 - 汉诺塔问题-递归实现-JAVA
			
public class hanio { /** * @param args */ public static void main(String[] args) { // TODO Auto-gene ...
 - sql在所有存储过程中查询包含某字符串的执行语句
			
直接在查询分析器中执行以下代码就行: 方法一) select name from sysobjects o, syscomments s where o.id = s.id and text like ...
 - Oracle学习DayTwo
			
一.创建表和管理表 1.表名和列名的命名规则 必须以字母开头必须在 1–30 个字符之间必须只能包含 A–Z, a–z, 0–9, _, $, 和 #必须不能和用户定义的其他对象重名必须不能是Orac ...
 - tensorFlow入门实践(三)初识AlexNet实现结构
			
参考黄文坚<TensorFlow实战>一书,完成AlexNet的整体实现并展望其训练和预测过程. import tensorflow as tf batch_size = 32 num_b ...
 - Qt 文件的操作
			
文件操作是应用程序必不可少的部分.Qt 作为一个通用开发库,提供了跨平台的文件操作能力.从本章开始,我们来了解下 Qt 的文件以及输入输出的功能,也就是 I/O 系统. Qt 通过QIODevice提 ...
 - python学习笔记 18-4-11
			
一.执行一个简单的代码 1.先创建目录 mkdir /home/dev 2.切换到目录 cd /home/dev 3.在目录下创建文件夹 vim hello.py 4.编辑文件内容 vim hello ...
 - Supervisor使用(启动nginx/tomcat/redis)
			
官方文档:http://supervisord.org/ 一.安装 yum install -y supervisor 二.开机自启动 执行以下命令: systemctl enable sup ...