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数据结构与算法】简单排序、二分查找和异或运算
简单排序 选择排序 概念 首先,找到数组中最小的那个元素,其次,把它和数组的第一个元素交换位置(如果第一个元素就是最小的元素那么它就和自己交换).再次,在剩下的元素中找到最小的元素,将它与数组的第二个 ...
随机推荐
- git切换用户踩坑
1)配置用户信息 git config --global user.name "username" git config --global user.email "**@ ...
- 关于GitHub
gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub 对于程序员来说就相当于一个仓库可以把自己写的东西放到网上 要想使用GitHub必须 ...
- My third homework
题目要求 定义一个包含有10个整数的数组a并初始化,定义一个指针变量p,p指向数组a,定义函数fun,要求在fun内部访问数组,并打印出数组中各元素的值,要求在fun函数内不要出现数字10. 代码: ...
- 安装easydict
在运行lightheadrcnn做test时,提示缺少easydict 不知道什么原因,用pip install easydict或者conda install easydict都没有用,不能安装ea ...
- vue项目总结
1.项目的结构
- 基于react的MQ管理系统遇到的问题以及解决办法
跟一般的管理系统差不多 一.需求 1.新增申请和修改的弹窗里面的部门跟应用组改成下拉框,并调取后台接口获取到相应的值.1.1相应的代码 // 获取部门 getDepartment = () => ...
- 文件访问权限:更改用户ID
本文来探讨一下通过更改用户ID来获取合适的文件访问权限.由于更改组ID的规则与用户ID相同,我们在这里只探讨用户ID. 纸上得来终觉浅 先了解以下几个基本知识: 用户ID包括:实际用户ID.有效用户I ...
- java虚拟机——监控工具
本篇记录本人在学习JDK监控工具的一些笔记.JDK是1.8 JPS:查看java的进程命令 左边的数字是进程ID,对应的是进程的名称. jstat:查看运行时状态信息. 1.-class:监控类装载, ...
- CentOS系统Nginx安装配置,随时更新
./configure --prefix=/etc/nginx \ #指定安装目录 --sbin-path=/usr/sbin/nginx \ #指定执行路径--conf-path=/etc/ngin ...
- task打印执行结果
使用debug输出task执行的register: - name: check extract session # script: /app/ansiblecfg/XXX/roles/test/tas ...