数组的排序:
把一个无序序列通过比较交换等手段使其变成一个有序序列
数组排序方法:
冒泡排序、选择排序、插入排序、快速排序、归并排序等
冒泡排序:
数组中的元素两两比较,大的往后放,经过一轮比较之后最大的元素就出现在最后面。冒泡排序举例如下:将数组从小到大排序
冒泡排序思想:
import java.sql.Array;
import java.util.Arrays;
public class MyTest {
public static void main(String[] args) {
//定义一个数组
int [] arr={29,93,9,68,56,89,99,12,23,-1,0,66};
//嵌套循环:冒泡排序时,一轮比较下来只会将最大的值放在最后,但是整个数组并非有序数组,因此想要将整个数组进行排序的话,就需要重复执行‘数组长度-1’次比较循环。
for(int j=0;j<arr.length - 1;j++) {
for (int i = 0; i < arr.length - 1-j; i++) {
if (arr[i] > arr[i + 1]) {
//两两之间的比较交换
int t = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = t;
}
}
}
//外层循环代表次数,里层循环是执行冒泡排序循环。
System.out.println(Arrays.toString(arr));//打印数组
}
}
选择排序:
从0索引处的元素开始 依次跟后面的元素挨个进行比较,小的往前放,经过一轮比较后最小的出现在最前面。
选择排序思想:
import java.util.Arrays;
public class MyTest2 {
public static void main(String[] args) {
int[] arr={29,93,9,68,56,89,99,12,23,-1,0,66};
//index定义索引,索引从0开始
int index=0;
//外层循环比较的轮数,有arr.length个元素就要循环arr.length-1轮
for(index=0;index<arr.length-1;index++) {
//里层循环是进行选择排序的循环,由于选择排序是从0索引处元素开始,
//因此里层循环开始元素就应该是1索引处与0索引处进行比较
//所以定义应该为int i = 1+index
for (int i = 1+index; i < arr.length; i++) {
if (arr[index] > arr[i]) {
int t = arr[index];
arr[index] = arr[i];
arr[i] = t;
}
//上述if语句中程序意思:两个位置索引处的元素值进行交换
}
}
System.out.println(Arrays.toString(arr));
}
}
插入排序
每次拿后面的一个元素插入到之前的一个有序序列当中,使之仍保持有序
插入排序思想:
假设有一组元素[k1,k2,…kn],排序开始就认为k1是一个有序序列,让k2插入上述表长为1的有序序列,使之成为一个表长为2 的有序序列,然后让k3插入上述表长为2的有序序列使之成为表长为3的有序序列,以此类推,最后让kn插入表长为kn-1的有序序列得到一个表长为n的有序序列。
程序举例:
while循环进行实现:
import java.util.Arrays;
public class MyTest4 {
public static void main(String[] args) {
int [] arr={29,93,9,68,56,89,99,12,23,-1,0,66};
//外层循环,实现的是循环arr.length-1轮
for (int i = 1; i < arr.length; i++) {
//里层循环实现插入排序
int j=i;
while(j>0&&arr[j]<arr[j-1]){
//值交换
int t=arr[j];
arr[j]=arr[j-1];
arr[j-1]=t;
j--;
}
}
System.out.println(Arrays.toString(arr));
}
}
for循环实现
import java.util.Arrays;
public class MyTest3 {
public static void main(String[] args) {
int [] arr={19,56,89,44,13};
//循环轮数,由数组元素长度决定
for(int i = 1;i<arr.length;i++){
//插入思想
for(int j=i;j>0;j--){
if(arr[j]<arr[j-1]){
int t=arr[j];
arr[j]=arr[j-1];
arr[j-1]=t;
}
}
}
System.out.println(Arrays.toString(arr));
}
}