快速排序
public class QuickSort {
public void qSort(int[] arr,int left,int right) {
if(left>right) {
return ;
}
int i = left;
int j = right;
int temp = arr[left];
while(i<j) {
//从右向左遍历
while(arr[j]>=temp&&i<j) {
j--;
}
//从左向右遍历
while(arr[i]<=temp&&i<j) {
i++;
}
if(i<j) {
int k = arr[i];
arr[i] = arr[j];
arr[j] = k;
}
}
if(arr[i]<temp) {
arr[left] = arr[i];
arr[i] = temp;
}
//System.out.println(Arrays.toString(arr)); //输出每次排序结果
qSort(arr, left, j-1);
qSort(arr, j+1, right);
}
public static void main(String[] args) {
int[] arr = {5,8,12,9,7,36,24};
QuickSort qs = new QuickSort();
qs.qSort(arr, 0, arr.length-1);
}
}
输出结果
[5, 7, 8, 9, 12, 24, 36]
改进思路:可以在方法执行前加个判断,判断数组是否已经有序,可以减少排序次数(可自己尝试实现)
冒泡排序
public class BubbleSort {
//冒泡排序,排序后结果从小到大
public void 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;
}
}
}
}
public static void main(String[] args) {
int[] arr = {5,8,12,9,7,36,24};
BubbleSort bs = new BubbleSort();
bs.bubbleSort(arr);
System.out.println(Arrays.toString(arr));
}
}
输出结果
[5, 7, 8, 9, 12, 24, 36]
改进思路:如果这次冒泡排序后与上次冒泡结果一样,则判断数组已经有序,不用再执行冒泡(自己尝试实现)
选择排序
/* 简单选择排序的基本思想:给定数组:int[] arr={里面n个数据};
* 第1趟排序,在待排序数据arr[1]~arr[n]中选出最小的数据,
* 将它与arrr[1]交换;第2趟,在待排序数据arr[2]~arr[n]中选出最小的数据,将它与r[2]交换;
* 以此类推,第i趟在待排序数据arr[i]~arr[n]中选出最小的数据,将它与r[i]交换,直到全部排序完成。
*/
public class SelectSort {
public void selectSort(int[] arr) {
for(int i=0;i<arr.length-1;i++) {
int k=i;
for(int j=i;j<arr.length-1;j++) {
if(arr[k]> arr[j]) {
k=j;
}
}
int temp=arr[i];
arr[i]=arr[k];
arr[k]=temp;
}
}
public static void main(String[] args) {
int[] arr = {5,8,12,9,7,36,24};
SelectSort ss = new SelectSort();
ss.selectSort(arr);
System.out.println(Arrays.toString(arr));
}
}