JAVA中在运用数组进行排序功能时,一般有四种方法:快速排序法、冒泡排序法、选择排序法以及插入排序法。下面我来给大家介绍一下。
-
快速排序法
快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 -
冒泡排序法
冒泡排序的方法是:重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
案例:给1-100范围内的10个不同的随机数进行排序
import java.util.Random;
public class Test {
public static void main(String[] args) {
Random rand = new Random();
//生成10个不重的随机1-100的整数
int[]array = new int[10];
int size = 0;
array[size++]=1+rand.nextInt(100);
boolean no;
for (int t;size<array.length; ){
t=1+rand.nextInt(100);
no = true;
for (int j = 0; j <size ; j++) {
if (array[j]==t){
no = false;
break;
}
}
if (no){
array[size++]=t;
}
}
System.out.println("排序前:");
for(int i : array){
System.out.print("\t"+i);
}
//冒泡排序
//外层循环控制轮次
for (int i = 0; i <array.length-1 ; i++) {
//内存循环控制每一轮比较多少次,找左边大
for (int j = 0,t; j <array.length-1-i ; j++) {
if (array[j] > array[j+1]) {
t = array[j];
array[j]=array[j+1];
array[j+1]=t;
}
}
}
System.out.println("\n排序后:");
for (int t : array) {
System.out.print("\t"+t);
}
}
}
- 选择排序法
选择排序法的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。
案例如上
//选择排序
for (int i = 0,maxVallx,maxIx,t; i < array.length-1; i++) {
maxVallx = 0;//假设最大值的下标为0,并通过内层循环进行调整
maxIx = array.length-1-i;//最大下标在每一轮是固定的
for (int j = 1; j <=maxIx; j++) {
if (array[maxVallx] < array[j]) {
maxVallx = j;
}
}
//判断最大值是否出现在最大下标,若不是则值交换
if (maxVallx!=maxIx){
t= array[maxVallx];
array[maxVallx ]=array[maxIx];
array[maxIx] = t;
}
}
- 插入排序法
插入排序法的基本思想是输入一个元素,检查数组列表中的每个元素,将其插入到一个已经排好序的数列中的适当位置,使数列依然有序,当最后一个元素放入合适位置时,该数组排序完毕。
案例如上
//插入排序
for (int i = 1,t,j;i <array.length;i++){
if (array[i]>=array[i-1]){
continue;
}
t = array[i];
for (j = i-1; j>=0&&t<array[j] ; j--) {
array[j+1] = array[j];
}
array[j+1] = t;
}