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数据结构与算法】简单排序、二分查找和异或运算
简单排序 选择排序 概念 首先,找到数组中最小的那个元素,其次,把它和数组的第一个元素交换位置(如果第一个元素就是最小的元素那么它就和自己交换).再次,在剩下的元素中找到最小的元素,将它与数组的第二个 ...
随机推荐
- Saiku Table展示数据合并bug修复(二十五)
Saiku Table展示数据合并bug修复 Saiku以table的形式展示数据,如果点击了 非空的字段 按钮,则会自动进行数据合并,为空的数据行以及数据列都会自动隐藏掉. 首先我们应该定位问题: ...
- 无界鼠标 Mouse Without Borders
最近遇到一个不爽的事,单位的办公电脑,配置低,自带笔记本电脑,屏幕小. 在给自己的笔记本电脑外接了22寸显示器以后,屏幕是舒服了很多,而且外接了微软的人机工学键鼠套装,加上自己的伪人机工学椅,舒适性确 ...
- windows 10系统在右键中添加管理员打开cmd
需要修改注册表内容,新建文件,后缀名改为reg,文件中粘贴下边的代码 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory ...
- jar包添加到maven本地仓库
操作系统windows 本地要配置过maven环境 cmd 运行命令 mvn install:install-file -Dfile=D:\commons-net-3.6.jar.jar -Dgro ...
- Python中集合set()的使用及处理
在Python中集合(set)与字典(dict)比较相似,都具有无序以及元素不能重复的特点 1.创建set 创建set需要一个list或者tuple或者dict作为输入集合 重复的元素在set中会被自 ...
- eclipse中添加jstl标签支持(引入头)
https://blog.csdn.net/wangyuxuan_java/article/details/8580318
- 【SoftwareTesting】Homework2
For the Program1, For Question1: The fault is that in the loop condition, ' i ' should be not less t ...
- 虚拟机 linux 没有分配id
输入命令 $ vim /etc/sysconfig/network-scripts/ifcfg-ens33 将ONBOOT=no改为ONBOOT=yes 输入命令 $ :wq ...
- Shell 使用 expr 进行数学运算
1.语法格式: 第一种:expr $num1 operator $num2 第二种:$(($num1 operator $num2)) 2.expr 操作符: 注意:这里比较为true,返回 1.只支 ...
- Docker多主机互联最佳实践
在公司使用docker多主机互联时碰到了各种坑.搞清楚后才发现如此简单,以下是根据实际经验的总结. 版本信息 Client: Version: 18.09.0 API version: 1.39 Go ...