数组有以下常见的几种算法:
- 冒泡排序法
- 快速排序法
- 二分查找法
(1)冒泡排序
思想:
-
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
-
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
-
针对所有的元素重复以上的步骤,除了最后一个。
-
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
例子一:
public class TestArray {
public static void main(String[] args) {
int[] arr = {6,3,2,8,9,1};
System.out.println("排序前数组是:");
for (int num:arr) {
System.out.print(num+" ");
}
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;
}
}
}
System.out.println();//换行
System.out.println("排序后的数组是:");
for (int num:arr) {
System.out.print(num+" ");
}
}
}
例子二:
public class MaoPaoSort {
public static void maoPaoSort(int[] arr){
//冒泡排序
for(int i = 0; i < arr.length; 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;
}
}
}
PrintArray.printArray(arr);
}
}
(2)快速排序法
思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
例子一:
public static int partition(int []array,int lo,int hi){
//固定的切分方式
int key = array[lo];
while(lo < hi){
while(array[hi] >= key && hi > lo){//从后半部分向前扫描
hi--;