public class SelectionSort {
public static void main(String[] args) {
int[] arr1 = {4,23,6,78,1,54,231,9,12};
int n = arr1.length;
Integer[] array = new Integer[n];
for (int i=0;i<n;i++) {
array[i] = arr1[i];
}
SectionSort(array, n);
// Output => 1 4 6 9 12 23 54 78 231
for(int i=0; i<n; i++)
{
System.out.print(array[i]+"\t");
}
}
private static void SectionSort(Integer[] array, int n) {
for(int i = 0; i<n; i++){
int min = i;
for(int j = i+1; j<n; j++){
if(less(array[j],array[min])) min = j;
}
exchange(array,i,min);
}
}
private static void exchange(Integer[] array, int i, int min) {
Integer t = array[i]; array[i] = array[min]; array[min] = t;
}
private static boolean less(Integer integer, Integer integer1) {
return integer.compareTo(integer1)<0;
}
}选择排序:
1,运行时间和输入无关,因为,算法的时间效率和比较次数有关,一个有序的数组,和一个无需的数组排序所用时间一样长。其实你可以从代码中发现,对于任何一个数字都要和前边的数字进行比较。记录最小值,然后交换。
2,时间复杂度 0(n^2),空间复杂度0(1)
接下来是插入排序
public class InsertionSort {
public static void main(String[] args){
int[] arr1 = {4,23,6,78,1,54,231,9,12};
sectionSort(arr1);
for(int i=0; i<arr1.length; i++)
{
System.out.print(arr1[i]+"\t");
}
}
private static void sectionSort(int[] arr1) {
int N = arr1.length;
for(int i = 1; i<N; i++){
//将a[i]插入到a[i-1],a[i-2],a[i-3] ...
for(int j = i; j>0&&less(arr1[j],arr1[j-1]); j--)
exchage(arr1,j,j-1);
}
}
public static void exchage(int[] array, int i, int min) {
int t = array[i]; array[i] = array[min]; array[min] = t;
}
public static boolean less(Integer integer, Integer integer1) {
return integer.compareTo(integer1)<0;
}
}希尔排序
public class shellSort {
public static void main(String[] args) {
int[] arr1 = {4,23,6,78,1,54,231,9,12};
int n = arr1.length;
ShellSort(arr1,n);
for(int i=0; i<n; i++)
{
System.out.print(arr1[i]+"\t");
}
}
private static void ShellSort(int[] arr1,int n) {
int h ;
for(h= n/2; h>0; h/=2);{
for(int i = h; i<n;i++){
for(int j = i-h; j>=0; j-=h){
if (arr1[j] > arr1[j + h]) {
int temp = arr1[j];
arr1[j] = arr1[j + h];
arr1[j + h] = temp;
}
}
}
}
}
}