Java排序
1 . 冒泡排序(平均时间复杂度:O(n2))
让数组当中相邻的两个数进行比较,数组当中比较小的数值向下沉,数值比较大的向上浮!外层for循环控制循环次数,内层for循环控制相邻的两个元素进行比较 !
package JaveSe;
public class Sort_maopao {
//定义一个排序方法
public static int[] maopao(int[] arr){
int temp = 0;
//外层循环
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]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
public static void main(String[] args) {
//给定一个数组
int[] arr = {1,8,4,7,2,6};
System.out.println("排序前的数组:");
for (int i : arr) {
System.out.print(i+ " ");
}
System.out.println();
System.out.println("排序后的数组:");
for (int i : maopao(arr)) {
System.out.print(i+ " ");
}
}
}
2 . 简单选择排序(平均时间复杂度:O(n2))
在待排序的数组中选择一个最小的元素,将它与数组的第一个位置的元素交换位置,然后从剩下的元素中选择一个最小的元素,将它与第二个位置的元素交换位置,如果最小元素就是该位置的元素,就将它和自身交换位置,依次类推,直到排序完成。
package JaveSe;
public class Sort_jianpai {
public static int[] select(int[] arr){
int temp = 0;
int k = 0;
for (int i = 0; i < arr.length-1; i++) {
k = i;
for (int j = i+1; j < arr.length; j++) {
if (arr[j]<arr[k]) {
k=j;
}
}
temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
return arr;
}
public static void main(String[] args) {
int[] arr = {6,4,8,2,5,1};
System.out.println("排序前的数组:");
for (int i : arr) {
System.out.print(i+ " ");
}
System.out.println();
System.out.println("排序后的数组:");
for (int i : select(arr)) {
System.out.print(i+ " ");
}
}
}
3 . 快速排序(平均时间复杂度:O(N*logN))
在数组中选择一个基准点,然后分别从数组的两端扫描数组,设两个指示标志(low指向起始位置,high指向末尾),首先从后半部分开始,如果发现有元素比该基准点的值小,就交换low和high位置的值,然后从前半部分开始扫秒,发现有元素大于基准点的值,就交换low和high位置的值,如此往复循环,直到low>=high,然后把基准点的值放到high这个位置。一次排序就完成了。以后采用递归的方式分别对前半部分和后半部分排序,当前半部分和后半部分均有序时该数组就自然有序了。
package JaveSe;
public class Sort_quick {
public static void quick(int[] arr,int low,int high){
if (low>=high) {
return;
}
int low_temp = low;
int high_temp = high;
int base = arr[low_temp];
//约定执行条件
while(low<high){
//从右往左走,找到最小基准值的停下
while(low<high && arr[high]>=base){
high--;
}
//从左往右走,找到最大基准值的停下
while(low<high && arr[low]<=base){
low++;
}
//交换low和high的值
if (low<high) {
int temp = arr[low];
arr[low] = arr[high];
arr[high] = temp;
}
}
//交换low和基准值
if (low_temp!= low) {
arr[low_temp] = arr[low];
arr[low] = base;
}
//左右各自递归循环
quick(arr, low_temp, low-1);
quick(arr, low+1, high_temp);
}
public static void main(String[] args) {
int[] arr = {3,7,8,5,2,6};
quick(arr, 0, arr.length-1);
for (int i : arr) {
System.out.print(i+" ");
}
}
}