假期已经过了一半,整个人都变得颓废了许多。今天没有出去玩,就学了几个简单的排序算法,以求安慰自己,好歹也是在假期里学习过了。(瘫~

C

这里一次性给出三种排序方法的代码,分别是冒泡排序,选择排序和归并排序。写完之后自己用简单的数据测了一下,均能够正常运行,但并不保证完全正确。

冒泡排序
按照我的理解,冒泡排序就是像鱼吐泡泡一样,让比较小的数据慢慢升到数组上方。它在代码实现时体现为,从底部开始,让数据两两比较,始终让比较小的那个数据放在上面。第一轮比较后,最小的数据就会排在第一位。n轮比较后,即可对这n个数排序。

/*冒泡排序的C语言实现*/#include<stdio.h>
#include<stdlib.h>
int main(){int numbers[100]={0};//储存数据int n;//记录数字个数int t;//交换位置时的中间变量scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&numbers[i]);//读取数据}for(int i=1;i<=n;i++){for(int j=n;j>=i;j--){if(numbers[j]<numbers[j-1]){t=numbers[j];numbers[j]=numbers[j-1];numbers[j-1]=t;}}}for(int i=1;i<=n;i++)printf("%d ",numbers[i]);return 0;
}

选择排序
在我看来,选择排序的原理相对比较简单,就是找到最小值,让它和最前面的数据交换位置;然后找第二小的数据,与排在第二位的数据交换位置……找第n小的数据,与放在第n位的数据交换位置……

/*选择排序的c语言实现*/
#include<stdio.h>
#include<stdlib.h>
int main(){int numbers[100]={0};//建立数组并初始化int n;//记录数据数量int t;//交换时的中间变量int p;//记录需要交换的变量的下标scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&numbers[i]);//接收数据}for(int i=1;i<=n;i++){p=i;for(int j=i;j<=n;j++){if(numbers[j]<numbers[p])p=j;}t=numbers[p];numbers[p]=numbers[i];numbers[i]=t;}for(int i=1;i<=n;i++)printf("%d ",numbers[i]);return 0;
}

归并排序
归并排序的原理我能力有限,讲不太清楚,大概是用了递归的思想。简单来说,就是先把数据不断二分,分成许多部分,最终分成只含一个数据的小部分。对每个小部分排序,再给稍微大一点的部分排序,一层一层排序,最后得到完整排好序的数组。
归并排序不仅可以给数据排序,还可以用来求逆序对的数量,以后再详述。

/*归并排序的c语言实现*/
#include<stdlib.h>
#include<stdio.h>
int num1[100]={0};
int num2[100]={0};//临时储存数组
int main(){int n;void sort(int m,int n);//声明函数scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&num1[i]);sort(1,n);//调用归并排序函数for(int i=1;i<=n;i++){printf("%d ",num1[i]);}return 0;
}void sort(int m,int n){//归并排序函数代码if(m==n) return;int p,t;int i,j;p=(m+n)/2;sort(m,p);sort(p+1,n);i=m;j=p+1;t=m;while(i<=p&&j<=n){if(num1[i]<num1[j])num2[t++]=num1[i++];else num2[t++]=num1[j++];}while(i<=p)num2[t++]=num1[i++];while(j<=n)num2[t++]=num1[j++];for(i=m;i<=n;i++){num1[i]=num2[i];}return;
}

Java

Java因为之前没有接触过,所以花了一些时间去搜索学习。但是搜索过程中发现Java的Java.util包里有一个叫Arrays.sort的方法,可以直接排序,于是本着不重复制造轮子的原则(其实是不会写又懒地找。。。),就直接写了一个排序的代码。

import java.util.*;
public class mppx {public static void main(String[] args){Scanner sc = new Scanner(System.in);while(sc.hasNext()){int n=sc.nextInt();//记录数据个数int[] numbers=new int[n];//开数组记录数据for(int i=0;i<n;i++){numbers[i]=sc.nextInt();//接收数据}Arrays.sort(numbers);//排序System.out.println(Arrays.toString(numbers));}}
}

C语言、Java学习笔记(三)---几种简单的排序算法相关推荐

  1. java学习笔记(三):前端miniUI控件库入门

    java学习笔记(三):前端miniUI控件库入门 最近在一家公司实习学习,一上来就需要学习了解相关的前端内容--miniUI.而这个内容自己本身并没有了解学习过,上手也是遇到了不少的问题,于是想把自 ...

  2. 学习笔记三:GMM模型以及EM算法理解及代码实现

    第三章 GMM模型以及EM算法 1.潜变量模型 使用潜变量解释观测变量的数学模型,称之为潜变量模型 潜变量模型将不完全数据(观测数据)的边缘分布转换成容易处理的完全数据(观测数据+潜变量)的联合分布. ...

  3. 几种简单的排序算法(JAVA)

    几种排序算法(JAVA) 一.代码 package com.hdwang;import java.util.Arrays;/*** Created by admin on 2017/1/20.*/ p ...

  4. C#开发技术点说明-四种简单的排序算法,AJAX,Http Module,Http 请求处理流

    我觉得如果想成为一名优秀的开发者,不仅要积极学习时下流行的新技术,比如WCF.Asp.Net MVC.AJAX等,熟练应用一些已经比较成熟的技术,比如Asp.Net.WinForm.还应该有着牢固的计 ...

  5. java注解和反射——狂神说java学习笔记三

    原文链接:公众号狂神说 视频教程[狂神说B站]: https://www.bilibili.com/video/BV12J41137hu 如有侵权,联系立删 什么是注解 Annotation是从JDK ...

  6. 【Java学习笔记三】抽象类与接口

    对象的类型转换分为自动转换和强制转换两种 派生类向基类转换是自动转换,因为派生类中包含基类 基类向派生类的转换是强制转换 强制类型转换是通过在转换对象前面使用圆括号运算符来实现,圆括号内为要转换的目标 ...

  7. Java学习笔记三——数据类型

    前言 Java是强类型(strongly typed)语言,强类型包含两方面的含义: 所有的变量必须先声明后使用: 指定类型的变量只能接受预支匹配的值. 这意味着每一个变量和表达式都有一个在编译时就确 ...

  8. java学习笔记(三)----成员权限,构造函数,this用法

    成员权限                         本类    同包类    非同包子类    非同包非子类 public         y        y               y  ...

  9. 初探swift语言的学习笔记三(闭包-匿名函数)

    作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/29353019 转载请注明出处 如果觉得文章对你有所帮助,请通过留言 ...

最新文章

  1. js左侧三级菜单导航代码
  2. ajax向服务端发送请求验证用户名是否可用小示例
  3. 【Linux系统编程应用】 Linux输入子系统(二)
  4. c#二叉树 取叶子节点个数_二叉树的最小深度+完全二叉树的节点个数
  5. bootstrap组件的案例代码
  6. Oracle外键约束修改行为(一)
  7. 北京黑龙江商会成立纪实(2)
  8. Spring Boot修改添加界面二合一
  9. 安卓学习笔记19:常用控件 - 单选按钮和复选框
  10. Elasticsearch 数据搜索篇
  11. SpringCloud工作笔记060---SpringBoot中使用WebSocket实现即时通讯_实现呼叫中心业务封装
  12. spring boot 在IDEA使用devtools热布署不成功,都没有注意的事!
  13. hdu1257----贪心最长上升子序列(最少拦截系统)
  14. 数据结构实验5-递归
  15. 大数据引领医药行业 为时过早
  16. 方正圆劲 沉雄厚重——张铜彦隶书管窥
  17. 漫谈云计算网络(二): 云计算网络的应用场景
  18. GO学习笔记(3)liteIde的使用和DEBUG的使用
  19. 微信渐变国旗头像来了!一键生成
  20. 程序员的人生——应届生北漂的第三天

热门文章

  1. iOS 开发者账号初试
  2. 快速实现ML302 GPS+4G发送定位信息详解
  3. 计算机主机灯,谁能给我说下电脑机箱灯怎么关
  4. 【MySQL·水滴计划】第三话- SQL的基本概念
  5. 资料,丰富资料,丰富资料(模式识别......)
  6. IDcard 验证代码----新身份证合法性验证
  7. Android连接WiFi再探索
  8. 【论文笔记15】以太坊智能合约去中心化的链上数据访问
  9. 解决pycharm运行很慢的问题
  10. 几个命令查看ELF文件的“秘密”