C语言、Java学习笔记(三)---几种简单的排序算法
来源:互联网 发布:农村淘宝服务站申请表 编辑:程序博客网 时间:2024/05/10 09:12
假期已经过了一半,整个人都变得颓废了许多。今天没有出去玩,就学了几个简单的排序算法,以求安慰自己,好歹也是在假期里学习过了。(瘫~
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)); } }}
阅读全文
0 0
- C语言、Java学习笔记(三)---几种简单的排序算法
- 几种常用的排序算法(c语言实现)
- JAVA基础笔记三——几种排序算法
- c语言编程的几种排序算法比较
- 几种常用排序算法的C语言实现
- 几种常见排序算法的c语言实现
- 几种常用排序算法的C语言实现
- 几种常见排序算法的C语言实现
- 几种排序算法的C语言实现
- 几种C语言实现的排序算法
- 几种常见排序算法的c语言实现
- 几种常见排序算法的c语言实现
- C语言几种排序算法的实现
- C语言常用的几种排序算法代码(选择排序,冒泡排序,插入排序,快速排序)
- Java数据结构和算法-简单排序(4-对象排序及几种排序的比较)
- C语言几种排序算法比较
- C语言几种排序算法比较
- c语言实现几种排序算法
- 显著性检测基础知识
- 预测的两类核心算法
- CodeForces
- java类加载器与反射学习笔记
- Codeforces 868D (Codeforces Round #438 D) Huge Strings 分治+哈希
- C语言、Java学习笔记(三)---几种简单的排序算法
- 大数据学习18:Hive在mysql的元数据表的关系和含义
- 可重入内核 & 可重入函数
- 102. Binary Tree Level Order Traversal
- CodeForces
- PAT备考
- java之流程控制与数组
- 以挂起的形式创建进程
- 试题16:反转链表