您的位置:首页 > 编程语言 > Java开发

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} 

代码参考:

        

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 |

第二轮:ary={2, 3, 7, 1 |} ,ary={2, 3, 7, 1 |}
,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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息