JAVA学习中常用的三种排序
2015-09-04 09:41
519 查看
在java学习当中,经常会涉及到排序问题,虽然在今后的工作当中,有现成的API可以使用,但在学习过程中,排序问题是为了锻炼基础语句及数组,并且在面试的时候,也会有笔试题出现,所以掌握三种排序还是非常必要的。
三种排序:选择排序、冒泡排序、插入排序
选择排序:
原理:1.将数组中每个元素与第一个元素进行比较,如果这个元素小于第一个元素,则交换。
2.循环第一条规则,找出这个数组中最小的元素,放在第一个
3.经过 n-1 轮比较完成排序
举例:数组:array={8 , 2 , 3 , 7 , 1}
第一轮:array={1 | 8 , 3 , 7 , 2}
第二轮:array={1 , 2| 8 , 7 , 3}
第三轮:array={1 , 2 , 3 | 8 , 7}
第四轮:array={1 , 2 , 3 , 7 | 8}
代码参考:
冒泡排序:
原理:比较相邻的元素,将小的放在前面
举例:数组:array={8 , 2 , 3 , 7 , 1}
第一轮:ary={2, 8, 3, 7, 1} ,ary={2, 3, 8, 7, 1} ,ary={2, 3, 7, 8, 1} ,ary={2, 3, 7, 1 |8 }
第二轮:ary={2, 3, 7, 1 |8 } ,ary={2, 3, 7, 1 |8 }
,ary={2, 3, 1 | 7, 8 }
第三轮:ary={2, 3, 1 |7, 8 } ,ary={2, 1 | 3, 7, 8 }
第四轮:ary={1, 2, 3, 7, 8}
代码参考:
插入排序:
原理:1.将数组分为两部分,后一部分的元素逐个与前一部分元素进行比较,在合理位置插入
2.插入排序的效率要高于以上两种算法
举例:数组:array={8 , 2 , 3 , 7 , 1}
第一步,array={8 | 2 , 3 , 7 , 1} ,取出2(temp=2),将temp和8比较,比8小,将array[1]的位置赋予值8,因为是边界,所以array[0]的值为temp
完成2,8排序,则数组array={2 , 8 , 3 , 7 , 1}
第二步,array={2
, 8 | 3 , 7 , 1},取出3(temp=3),将temp和8比较,比8小,将array[2]的位置赋予值8,将temp和2比较,比2大,将array[1]的位置赋予值3
完成2,3,8排序,则数组array={2
, 3 , 8 , 7 , 1}
第三步,array={2
, 3 ,8 | 7 , 1},取出7(temp=7),将temp和8比较,比8小,将array[3]的位置赋予值8,将temp和3比较,比3大,将array[2]的位置赋予值3
完成2,3,7,8排序,组数组array={2
, 3 , 7 , 8 , 1}
第四步,array={2
, 3 , 7 , 8 | 1},取出1(temp=1),将temp和8比较,比8小,将array[4]的位置赋予值8,将temp和7比较,比7小,将array[3]的位置赋予值7,将temp和3比较,比3小,将array[2]的位置赋予值3,将temp和2比较,比2小,将array[1]的位置赋予值2,到边界,array[0]的值为temp
完成1,2,3,7,8,的排序,则数组array={1,2
, 3 , 7 , 8}
代码参考:
PS:也提一下Java API中也提供了排序——Arrays.sort(ary)
三种排序:选择排序、冒泡排序、插入排序
选择排序:
原理:1.将数组中每个元素与第一个元素进行比较,如果这个元素小于第一个元素,则交换。
2.循环第一条规则,找出这个数组中最小的元素,放在第一个
3.经过 n-1 轮比较完成排序
举例:数组:array={8 , 2 , 3 , 7 , 1}
第一轮:array={1 | 8 , 3 , 7 , 2}
第二轮:array={1 , 2| 8 , 7 , 3}
第三轮:array={1 , 2 , 3 | 8 , 7}
第四轮:array={1 , 2 , 3 , 7 | 8}
代码参考:
import java.util.Arrays; public class SortDemo { public static void main(String[] args) { int[] array = { 8, 2, 3, 7, 1 }; System.out.println(Arrays.toString(selectSort(array))); } public static int[] selectSort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { for (int j = i + 1; j < arr.length; j++) { if (arr[i] > arr[j]) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } return arr; } }
冒泡排序:
原理:比较相邻的元素,将小的放在前面
举例:数组:array={8 , 2 , 3 , 7 , 1}
第一轮:ary={2, 8, 3, 7, 1} ,ary={2, 3, 8, 7, 1} ,ary={2, 3, 7, 8, 1} ,ary={2, 3, 7, 1 |8 }
第二轮:ary={2, 3, 7, 1 |8 } ,ary={2, 3, 7, 1 |8 }
,ary={2, 3, 1 | 7, 8 }
第三轮:ary={2, 3, 1 |7, 8 } ,ary={2, 1 | 3, 7, 8 }
第四轮:ary={1, 2, 3, 7, 8}
代码参考:
<pre name="code" class="java">import java.util.Arrays; public class SortDemo { public static void main(String[] args) { int[] array = { 8, 2, 3, 7, 1 }; System.out.println(Arrays.toString(bubbleSort(array))); } public static int[] bubbleSort(int[] arr){ for(int i=0; i<arr.length-1; i++){ for(int j=0; j<arr.length-1-i; j++){ if(arr[j]>arr[j+1]){ int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } return arr; } }
插入排序:
原理:1.将数组分为两部分,后一部分的元素逐个与前一部分元素进行比较,在合理位置插入
2.插入排序的效率要高于以上两种算法
举例:数组:array={8 , 2 , 3 , 7 , 1}
第一步,array={8 | 2 , 3 , 7 , 1} ,取出2(temp=2),将temp和8比较,比8小,将array[1]的位置赋予值8,因为是边界,所以array[0]的值为temp
完成2,8排序,则数组array={2 , 8 , 3 , 7 , 1}
第二步,array={2
, 8 | 3 , 7 , 1},取出3(temp=3),将temp和8比较,比8小,将array[2]的位置赋予值8,将temp和2比较,比2大,将array[1]的位置赋予值3
完成2,3,8排序,则数组array={2
, 3 , 8 , 7 , 1}
第三步,array={2
, 3 ,8 | 7 , 1},取出7(temp=7),将temp和8比较,比8小,将array[3]的位置赋予值8,将temp和3比较,比3大,将array[2]的位置赋予值3
完成2,3,7,8排序,组数组array={2
, 3 , 7 , 8 , 1}
第四步,array={2
, 3 , 7 , 8 | 1},取出1(temp=1),将temp和8比较,比8小,将array[4]的位置赋予值8,将temp和7比较,比7小,将array[3]的位置赋予值7,将temp和3比较,比3小,将array[2]的位置赋予值3,将temp和2比较,比2小,将array[1]的位置赋予值2,到边界,array[0]的值为temp
完成1,2,3,7,8,的排序,则数组array={1,2
, 3 , 7 , 8}
代码参考:
import java.util.Arrays; public class SortDemo { public static void main(String[] args) { int[] array = { 8, 2, 3, 7, 1 }; System.out.println(Arrays.toString(insertSort(array))); } public static int[] insertSort(int[] arr){ int i,j,t; for(i=1; i<arr.length; i++){ t = arr[i]; for(j=i-1; j>=0 && t<arr[j]; j--){ arr[j+1] = arr[j]; } arr[j+1] = t; } return arr; } }
PS:也提一下Java API中也提供了排序——Arrays.sort(ary)
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序