选择排序
SelectionSort
package jianglongjie;
/*
* 每次找到最小的和最前交换
* 循环length次
*
* 时间 o n平方
*
* 想办法优化下: 遍历一次 还可以找出最大值
*/
public class SelectionSort {
public static void sort(int[] args) {
int [] arr= {5,3,6,8,1,7,9,4,2};
for(int i=0; i<arr.length-1; i++) {
int minPos=i;
for(int j=i+1; j<arr.length; j++) {
if(arr[j] < arr[minPos]) {
minPos = j;
}
}
System.out.print("minPos:" + minPos);
swap(arr, i, minPos);
//输出数组
System.out.println("经过第"+i+"次排序后");
print(arr);
}
}
static void swap(int[] arr, int i, int minPos) {
int temp = arr[i];
arr[i] = arr[minPos];
arr[minPos] = temp;
}
static void print(int[] arr) {
for(int k=0; k<arr.length; k++) {
System.out.print(arr[k]+ " ");
}
}
}
SelectionSortPro
package jianglongjie;
/*
* 每次找到最小的和最前交换
* 循环length次
*
* 时间 o n平方
*
* 想办法优化下: 遍历一次 还可以找出最大值
*/
public class SelectionSortPro {
public static void main(String[] args) {
int [] arr= {5,3,6,8,1,7,9,4,2};
for(int i=0; i<arr.length-1-i; i++) {
int minPos=i;
int maxPos=i;
for(int j=i+1; j<arr.length-i; j++) {
if(arr[j] < arr[minPos]) {
minPos = j;
}
if(arr[j] > arr[maxPos]) {
maxPos = j;
}
}
System.out.print("minPos:" + minPos);
System.out.println(" maxPos:" + maxPos);
swap(arr, i, minPos);
swap(arr, arr.length-1-i,maxPos);
//输出数组
System.out.println("经过第"+i+"次排序后");
print(arr);
}
}
static void swap(int[] arr, int i, int minPos) {
int temp = arr[i];
arr[i] = arr[minPos];
arr[minPos] = temp;
}
static void print(int[] arr) {
for(int k=0; k<arr.length; k++) {
System.out.print(arr[k]+ " ");
}
}
}
冒泡排序
BobbleSort
package jianglongjie;
/**
* @author 作者: 江龙杰
* @version 创建时间:2021年6月26日 下午9:19:29
* 类说明 每次找到最大一个 找length次
*/
public class BobbleSort {
public static void main(String[] args) {
int [] arr= {9,3,1,4,6,8,7,5,2};
sort(arr);
print(arr);
}
static void sort(int[] arr) {
for(int i = 0; i<arr.length; i++) {
findMax(arr,arr.length-i-1);
}
}
static void findMax(int[] arr, int i) {
for(int j = 0; j < i; j++) {
if(arr[j] > arr[j+1]) {
swap(arr,j,j+1);
}
}
}
static void swap(int[] arr, int i, int minPos) {
int temp = arr[i];
arr[i] = arr[minPos];
arr[minPos] = temp;
}
static void print(int[] arr) {
for(int k=0; k<arr.length; k++) {
System.out.print(arr[k]+ " ");
}
}
}
插入排序
InsertionSort
package jianglongjie;
/**
* @author 作者: 江龙杰
* @version 创建时间:2021年6月26日 下午9:30:42
* 类说明
对基本有序数组好用
从第二位开始 看看前面有没小的
向前插入(一个个交换)
*/
public class InsertionSort {
public static void main(String[] args) {
int [] arr= {9,3,1,4,6,8,7,5,2};
sort(arr);
print(arr);
}
static void sort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
for (int j = i; j > 0 && arr[j]<arr[j-1]; j--) {
if(arr[j] < arr[j-1]) {
swap(arr,j,j-1);
}
}
}
}
static void swap(int[] arr, int i, int minPos) {
int temp = arr[i];
arr[i] = arr[minPos];
arr[minPos] = temp;
}
static void print(int[] arr) {
for(int k=0; k<arr.length; k++) {
System.out.print(arr[k]+ " ");
}
}
}
InsertionSortPro
package jianglongjie;
/**
* @author 作者: 江龙杰
* @version 创建时间:2021年6月26日 下午9:43:59
* 类说明 用临时变量记录插入项 改进不用swap方法 因为是插入 234561 123465 把23456直接向后推
*/
public class InsertionSortPro {
public static void main(String[] args) {
int [] arr= {9,3,1,4,6,8,7,5,2};
sort(arr);
print(arr);
}
static void sort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
int temp = arr[i];
int j;
for (j = i; j > 0 && arr[j - 1] > temp; j--) {
arr[j] = arr[j - 1];
}
arr[j] = temp;
}
}
static void print(int[] arr) {
for(int k=0; k<arr.length; k++) {
System.out.print(arr[k]+ " ");
}
}
}
希尔排序
ShellSort
package jianglongjie2;
/**
* @author 作者: 江龙杰
* @version 创建时间:2021年6月26日 下午10:19:04
* 类说明 先 4格一跨 排序 在 4/2 4/2/2
*/
public class ShellSort {
public static void main(String[] args) {
int [] arr= {9,6,11,3,5,12,8,7,10,15,14,4,1,13,2};
sort(arr);
print(arr);
}
static void sort(int[] arr) {
int h = 1;
while( h <= arr.length /3) {
h= h*3 +1;
}
//for(int gap = arr.length >> 1; gap > 0; gap /=2 ) {
for(int gap = h >> 1; gap > 0; gap =(gap-1)/3 ) {
for (int i = gap; i < arr.length; i++) {
for (int j = i; j > gap-1 ; j-=gap) {
if(arr[j] < arr[j-gap]) {
swap(arr,j,j-gap);
}
}
}
}
}
static void swap(int[] arr, int i, int minPos) {
int temp = arr[i];
arr[i] = arr[minPos];
arr[minPos] = temp;
}
static void print(int[] arr) {
for(int k=0; k<arr.length; k++) {
System.out.print(arr[k]+ " ");
}
}
}
归并排序
MergeSort1.0
package jianglongjie2;
/**
* @author 作者: 江龙杰
* @version 创建时间:2021年6月26日 下午11:42:03
* 类说明 归并version 1.0
*/
public class MergeSort {
public static void main(String[] args) {
int[] arr = {1,4,7,10,3,6,9};
sort(arr);
print(arr);
}
static void sort(int[] arr) {
int mid = arr.length / 2;
System.out.println(mid);
int i = 0;
int j = mid + 1;
int[] temp = new int [arr.length];
int k=0;
while (i <= mid && j < arr.length ) {
temp[k++] = arr[i] < arr[j] ? arr[i++] : arr[j++];
// if(arr[i] < arr[j] ) {
// temp[k++] = arr[i++];System.out.println(temp[k-1]);
// }else {
// temp[k++] = arr[j++];System.out.println(temp[k-1]);
// }
}
print(temp);
System.out.println("i=" +i + "j=" + j);
while (i <= mid) {temp[k++] = arr[i++];System.out.println("dd 1" + k);}
while( j < arr.length) { temp[k++] = arr[i++];System.out.println("dd " + k);}
print(temp);
}
static void swap(int[] arr, int i, int minPos) {
int temp = arr[i];
arr[i] = arr[minPos];
arr[minPos] = temp;
}
static void print(int[] arr) {
for(int k=0; k<arr.length; k++) {
System.out.print(arr[k]+ " ");
}
}
}