直接插入排序
假设前N-1个数都是有序的,现将第N个数插入,如此迭代知道全部有序
public static int[] sort(int[] nums){
for(int i=1;i<nums.length;i++){
int temp=nums[i];
int replace=i;
for(int j=i-1;j>=0;j--){
if(nums[j]>temp){
nums[j+1]=nums[j];
replace=j;
}else {
break;
}
}
nums[replace]=temp;
}
return nums;
}
希尔排序
对一个间隔d,将数组分成d组,每个组的下标间隔为d,做直接插入排序,排序结束后d减半,继续做,知道d=1
public static int[] hillSort(int[] nums,int d){
for(;d>=1;d/=2){
for(int i=1;i<nums.length;i++){
int temp=nums[i];
int j=i-d;
for(;j>=0&&nums[j]>temp;j-=d){
nums[j+d]=nums[j];
}
nums[j+d]=temp;
}
}
return nums;
}
冒泡排序
从下到上对相邻的数字进行比较,较大的往上冒,依次循环
public static int[] bubbleSort(int[] nums){
for(int i=nums.length;i>=0;i--){
for(int j=0;j<i-1;j++){
if(nums[j]>nums[j+1]){
int temp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
}
}
return nums;
}
选定一个基准元素,从头到尾从尾到头分别搜索,分成大于和小于基准元素两组,继续对两者进行之前操作
public static void quick(int high,int low,int[] nums){
if(high<=low)
return;
int flag=low;
int highflag=high;
while(high>low){
while(nums[low]<nums[flag]){
low++;
}
while(nums[high]>nums[flag]){
high--;
}
int temp=nums[low];
nums[low]=nums[high];
nums[high]=temp;
}
quick(low-1,flag,nums);
quick(highflag,low+1,nums);
}