
选择排序
每轮开始位置加一,从本轮数组开始位置向后遍历,找到当中的最小值放到本轮数组开始位置
代码:
java
package Test20250207;
public class SelectSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr= {6,7,5,3,1,2,4,9,8};
sort(arr);
for(int i:arr) {
System.out.print(i+" ");
}
}
public static void sort(int[] arr) {
for(int j=0;j<arr.length;j++) {
int minIndex=j;
for(int i=j;i<arr.length;i++) {
if(arr[i]<arr[minIndex]) {
minIndex=i;
}
}
int temp=arr[j];
arr[j]=arr[minIndex];
arr[minIndex]=temp;
}
}
}
插入排序

缺点:后面的数值小交换次数多
代码:
java
package Test20250207;
public class InsertSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr= {6,7,5,3,1,2,4,9,8};
sort(arr);
for(int i:arr) {
System.out.print(i+" ");
}
}
public static void sort(int[] arr) {
for(int i=1;i<arr.length;i++) {
for(int j=i-1;j>=0;j--) {
if(arr[j]>arr[j+1]) {
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
else {
break;
}
}
}
}
}
希尔排序

时间复杂度是O(nlogn)
代码:
java
package Test20250207;
public class ShellSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr= {6,7,5,3,1,2,4,9,8};
sort(arr);
for(int i:arr) {
System.out.print(i+" ");
}
}
public static void sort(int[] arr) {
for(int grp=arr.length/2;grp>=1;grp/=2) {
for(int i=grp;i<arr.length;i++) {
for(int j=i-grp;j>=0;j-=grp) {
if(arr[j]>arr[j+grp]) {
int temp=arr[j];
arr[j]=arr[j+grp];
arr[j+grp]=temp;
}
else {
break;
}
}
}
}
}
}
基数排序

java
package Test20250207;
public class RadixSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr= {5,27,643,75,267,90,56,43,123};
sort(arr);
for(int i:arr) {
System.out.print(i+" ");
}
}
public static void sort(int[] arr) {
int[][] bucket=new int[10][arr.length];
int[] elementCount=new int[10];
int max=arr[0];
for(int i=0;i<arr.length;i++) {
max=Math.max(max,arr[i]);
}
int maxLen=(max+"").length();
int n=1;
for(int h=0;h<maxLen;h++) {
for(int i=0;i<arr.length;i++) {
int element=arr[i]/n%10;
bucket[element][elementCount[element]]=arr[i];
elementCount[element]++;
}
int index=0;
for(int k=0;k<elementCount.length;k++) {
if(elementCount[k]!=0) {
for(int j=0;j<elementCount[k];j++) {
arr[index]=bucket[k][j];
index++;
}
}
elementCount[k]=0;
}
n*=10;
}
}
}