java数据结构和算法-1,简单排序
2017-05-18 22:48
197 查看
在java数据结构和算法中,简单排序分为冒泡排序、选择排序、插入排序三种,也是最基础的三种,
废话不多,码上见!
1、冒泡排序
输出结果:
重点:
数据从底部开始往上排
遇到比自身大的数继续排,直到遇到小于等于自身的数为止
2、插入排序
输出结果
重点:
插入排序是从第二个数开始排的,用第二个数开始,然后和前面的数进行比较,并不是和冒泡一样比较所有的数。
插叙排序的效率比冒泡要高,因为不用每个数据都和数组中的数据对比一遍
其实和冒泡差不多,只是冒泡是每比较一次数据就交换一次,这里插入排序一轮比较之后交换的次数是1,其他的都是把前面的数移动到了后面,没有数据交换。
3、选择排序
输出结果
重点:
和插入排序一样需要有游标
排序中比较完数据之后不作数据交换的操作,而是记录要交换的位置
效率在这三个中最高,因为全程执行的数据交换操作最少
废话不多,码上见!
1、冒泡排序
public class BubbleSort{ public static void sort(int[] arr){ //临时变量,用于数据交换,如果不用临时变量的话用运算符或者增加操作步骤也能实现; int temp = 0; //一个for循环用于遍历一次数组中的数据 for (int i = 0; i < arr.length -1; i++) { //第二个for循环为了让每一个数组中的数据都去对比一次数组中的数据,初学的时候不知道为什么就是不会!!!太笨了~(* ̄ω ̄)~ for (int j = arr.length -1; j > i; j--) { if (arr[j] < arr[i]) {//正在往上冒的数据如果遇到小于它的数据就交换位置 temp = arr[j]; arr[j] = arr[i]; arr[i] = temp; } } } //打印排序后的数据 for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } public static void main(String[] args) { int[] arr = {23,43,5,71};//声明一个int类型数组,用于排序 sort(arr);//执行排序方法 } }
输出结果:
5 23 43 71
重点:
数据从底部开始往上排
遇到比自身大的数继续排,直到遇到小于等于自身的数为止
2、插入排序
//这次没有另外写方法了,直接放main里 public static void main(String[] args) { int[] arr = {19,65,1,8,33,45,21,6};//声明一个int类型数组,用于排序 int temp = 0;//临时变量用于交换数据 int k = 0;//起到游标的作用,记录需要插入的位置 for (int i = 1; i < arr.length; i++) { k = i; temp = arr[i];//记录正在排序的那个数 while(k > 0 && temp <= arr[k-1]){//判断从后往前正在排序的那一个是否已经到头了,以及判断前一个数是否比自身大 arr[k] = arr[k-1];//把比temp大的数往后移 k--;//记录当前数据往后移之后,“空出来的”,需要插入的位置 } arr[k] = temp;//最后把数据放到需要的插入的位置 } //打印排序后的结果 for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } }
输出结果
1 6 8 19 21 33 45 65
重点:
插入排序是从第二个数开始排的,用第二个数开始,然后和前面的数进行比较,并不是和冒泡一样比较所有的数。
插叙排序的效率比冒泡要高,因为不用每个数据都和数组中的数据对比一遍
其实和冒泡差不多,只是冒泡是每比较一次数据就交换一次,这里插入排序一轮比较之后交换的次数是1,其他的都是把前面的数移动到了后面,没有数据交换。
3、选择排序
public static void sort(int[] arr){ int k;//起到游标的作用,记录要交换的位置 int temp;//临时变量用于交换数据 for (int i = 0; i < arr.length; i++) { k = i;//记录开始的时候要排序的数所在的位置 for (int j = i; j < arr.length; j++) {//从当前位置(arr[k])往后比较 if (arr[j]<arr[k]) {//在比较数据的时候如果遇到后面的数比自身小,就记录后面的数的位置 k = j; } } temp = arr[i];//在最后执行数据交换 arr[i] = arr[k]; arr[k] = temp; } for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } public static void main(String[] args) { int[] arr = {9,15,4,2,99};//声明一个int类型数组,用于排序 sort(arr); }
输出结果
2 4 9 15 99
重点:
和插入排序一样需要有游标
排序中比较完数据之后不作数据交换的操作,而是记录要交换的位置
效率在这三个中最高,因为全程执行的数据交换操作最少
相关文章推荐
- java数据结构与算法-简单排序-冒泡排序
- Java数据结构与算法--简单排序
- java数据结构与算法-简单排序-插入排序
- 从最简单的vector中sort用法到自定义比较函数comp后对结构体排序的sort算法
- 基本算法简单实现-二分法查找、合并排序、冒泡排序、插入排序、选择排序、快速排序
- PHP算法学习之“简单的选择排序“
- 算法和数据结构---排序--简单选择排序
- C#中定义数组和一个简单排序算法实现。
- 【啊哈!算法】最快最简单的排序——桶排序
- 简单算法(直接插入排序)
- 简单排序算法之快速排序
- 啊哈!算法】最快最简单的排序——桶排序
- 三种简单排序算法及实现(引用)
- 【一周一算法】算法1:最快最简单的排序——桶排序(转)
- 快速排序-转自java数据结构与算法
- 【啊哈!算法】算法1:最快最简单的排序——桶排序
- 简单排序算法--冒泡排序
- 数据结构学习笔记一:简单排序与查询算法
- 算法与数据结构——排序(四)简单插入排序
- 五、排序算法之简单算法——冒泡排序、简单选择排序和直接插入排序