排序算法之简单算法——java实现
2017-09-29 17:01
369 查看
排序算法之简单算法
排序算法中的简单算法共有3种:冒泡排序,简单选择排序,直接插入排序。1.冒泡排序
冒泡排序是通过从数组最后往前进行比较,把较小的数交换到前面,较大的数交换到后面的一种交换排序算法。其java代码如下:
//冒泡排序,小的数一个个冒上来 public void bubbleSort(int[] a) { int i,j; boolean flag=true;//若已冒泡完成,则退出for循环 for (i = 0; i < a.length&&flag; i++) { flag=false; for (j = a.length-1; j>i; j--) {//从后往前循环,把小的数冒到前面,大的数到后面 if (a[j-1]>a[j]) { swap(a, j-1, j); flag=true; } } } }
在上面的代码中,加入了一个flag标志,用来判断是否已经有序了,可以减少一些不必要的循环。
冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1),并且冒泡排序是一种稳定的排序。
2.简单选择排序
简单选择排序是从数组中选出第1小的元素放入a[0],第2小的元素放入a[1],第n小的元素放入a[n-1]位置的一种选择排序算法。其java代码如下:
//简单选择排序,选出第1小放到第1个位置,第2小到第2个位置,第n小到第n个位置 public void simpleSelectSort(int[] a) { int i,j,min; for(i=0;i<a.length;i++) { min=i;//第n小 for ( j= i+1;j < a.length; j++) {//找到i+1...length的最小的值的位置 if (a[j]<a[min]) { min=j; } } if (min!=i) {//最小值不是初始位置,则交换 swap(a, min, i); } } }
简单选择排序算法的时间复杂度为O(n^2),空间复杂度为O(1),且是一种稳定的排序算法。
3.直接插入排序
直接插入排序的基本思想是:将a[1]插入a[0]的相应位置,以组成一个有序列表a[0…1],将a[2]插入有序列表a[0…1]的相应位置,以组成一个有序列表a[0…2],将a插入有序列表a[0…n-1]的相应位置,以组成一个有序的a[0…n]。
直接插入排序是一种插入排序类算法,其java代码如下:
//直接插入排序,将待排序元素插入已排好序的序列中 public void insertSort(int[] a) { int i,j,m; for (i = 1; i < a.length; i++) {//从第二个位置开始,依次将该元素插入前面的排好序的序列中 if (a[i]<a[i-1]) {//待排序元素比序列中最小的元素小,则进行插入 m=a[i];//标记待排序元素的值 for (j = i-1;j>=0&&a[j]>m;j--) { //从排好序的序列中依次向前比较,直到m>a[j]标记元素大于排序元素,或m小于排序元素中最小的 a[j+1]=a[j];//排好序的序列元素后移 } a[j+1]=m;//标记元素放入空缺的位置 } } }
直接插入排序算法的时间复杂度为O(n^2),空间复杂度为O(1),其实一种稳定的排序算法。
4.总结
这三种简单的排序算法是学习后面希尔排序,堆排序,快速排序,归并排序的基础,只有理解了这些基础的简单排序算法,才能更好的理解和编写后面要写的改进排序算法。相关文章推荐
- 黑马程序员——Java基础语法:几种简单的排序算法的实现
- JSP实现的Java通用简单分页算法之三
- 感知机学习算法的原始形式的java简单实现
- 数据结构与算法——基数排序简单Java实现
- 【算法数据结构Java实现】递归的简单剖析及时间复杂度计算
- 合婚算法之用JAVA实现简单级别的神煞合婚法
- 查找""排序""简单数学计算" "简单算法"[Java实现](数据结构和算法)(复习)(持续更新
- java几种排序算法的实现及简单分析
- java实现简单算法(三)
- 用Java实现小球碰壁反弹(算法十分简单)
- 必须知道的八大种排序算法【java实现】(二) 选择排序,插入排序,希尔算法【详解】
- 几种排序算法java简单实现
- 简单算法(java实现)
- 进程调度-优先级算法(Java简单实现)
- 【算法】散列表及散列函数的java简单实现
- java实现简单算法(一)
- 大整数乘法算法简单实现 java
- 存储管理-分区分配与回收算法(Java简单实现)
- JAVA实现简单分组算法
- 最简单的LRU算法java实现