冒泡排序
package com.itheima.sort;
import java.util.Arrays;
/**
* 冒泡排序:比较相邻的2个数,大的就往后排
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {6,5,3,1,8,7,2,4};
int temp;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length-i-1; j++) {
if (arr[j+1]<arr[j]) {
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
选择排序
package com.itheima.sort;
import java.util.Arrays;
import java.util.Date;
/**
* 选择排序:在待排序的一组数据中,选出最小(最大)的一个数
* 与第一个位置的数交换,然后在剩下的数中,再找最小(最大)的数
* 与第二个位置的数交换位置
*/
public class SelectSort {
public static void main(String[] args) {
int[] arr = {6, 5, 3, 1, 8, 7, 2, 4};
for (int i = 0; i < arr.length - 1; i++) {
int k = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[k] > arr[j]) {
k = j;
}
}
int temp = arr[k];
arr[k] = arr[i];
arr[i] = temp;
System.out.println(Arrays.toString(arr));
}
}
}
插入排序
package com.itheima.sort;
import java.util.Arrays;
/**
* 插入排序:将一个记录插入到已排好序的序列中,从而得到一个新的有序
* 序列(将序列的第一个数据看成是一个有序的子序列,然后从第二个记录
* 逐个向该有序的子序列进行有序的插入,直至整个序列有序)
*/
public class InsertSort {
public static void main(String[] args) {
int[] arr = {6,5,3,1,8,7,2,4};
int temp;
for (int i = 1; i < arr.length; i++) {
temp = arr[i];
int j;
for (j=i-1;j>=0;j--) {
if (arr[j]>temp) {
arr[j+1]=arr[j];
}else {
break;
}
}
arr[j+1]=temp;
System.out.println(Arrays.toString(arr));
}
}
}
快速排序
package com.itheima.sort;
import java.util.Arrays;
/**
* 快速排序:原理,通过一趟扫描将要排序的数据分割成独立的两部
* 分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后
* 再按此方法对这两部分数据分别进行快速排序,整个排序过程可以
* 递归进行,以此达到整个数据变成有序序列
*/
public class QuickSort {
public static void main(String[] args) {
int[] arr = {6, 5, 3, 1, 8, 7, 2, 4};
quickSort(arr,0,arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int[] arr, int left, int right) {
// 声明一个数来存基准数
int temp;
if (left < right) {
// 从小到大
temp=partition(arr,left,right);
// 一直递归处理左边的一堆数
quickSort(arr,left,temp-1);
// 一直递归处理右边的一堆数
quickSort(arr,temp+1,right);
}
}
public static int partition(int[] arr, int left, int right) {
// 取一个参照数
int key = arr[left];
// 一直可以排序
while (left < right) {
// 第一次右边先走,右边往左边一步一步移动
while (left < right && arr[right] >= key) {
// 右边往左一步
right--;
}
// 交换位置
arr[left] = arr[right];
// 左边往右边走
while (left < right && arr[left] <= key) {
left++;
}
// 交换位置
arr[right] = arr[left];
}
// 碰面了把参照数交给往右走的
arr[left] = key;
// 返回左边的数
return left;
}
}