import java.util.Arrays;
public class Test {
// 选择排序:找到当前基地pos,然后和与后面数据做比较,如果后面数据小于基地数据pos,
// 交换,最后比较i=pos是否再同一个位置,不同交换,两次for循环 需要交换
public static void selectSort(int[] nums){
if (nums==null||nums.length==0){
return;
}
for (int i=0;i<nums.length;i++){
int pos=i;
//j必须等于1+1!!
for (int j=i+1;j<nums.length;j++){
if(nums[j]<nums[pos]){
pos=j;
}
}
if (i!=pos){
int temp=nums[i];
nums[i]=nums[pos];
nums[pos]=temp;
}
}
}
//插入排序,将当前数据的下一个数据做为插入数据insert,比较后面一条数据和插入数据大小,
// 如果大于插入数据,将后面这个数据前移,并且以此比较(j--),最后将插入数据赋给j+1
//一次for选择一次while
private static void insertSort(int[] nums){
if (nums==null||nums.length==0){
return;
}
for (int i=0;i<nums.length;i++){
int insert=nums[i];
int j=i-1;
while (j>=0&&nums[j]>insert){
nums[j+1]=nums[j];
j--;
}
nums[j+1]=insert;
}
}
//快速排序 需要递归,先比较开始数据和结束数据,找到基地数据pivot;先和左边比较如果左边数据小于基地数据右移,
// 然后右边比较,如果右边数据比基地数据大,左移,然后再交换,再递归,三个while
private static void quickSort(int[] nums){
sort(nums,0,nums.length-1);
}
private static void sort(int[] nums,int start,int end){
if (start>=end){
return;
}
int pivot=nums[start];
int left=start;
int right=end;
while (left<=right){
while ((left<=right&&nums[left]<pivot)){
left++;
}
while ((left<=right&&nums[right]>pivot)){
right--;
}
if (left<=right){
int temp=nums[right];
nums[right]=nums[left];
nums[left]=temp;
left++;
right--;
}
}
sort(nums,start,right);
sort(nums,left,end);
}
// 冒泡排序 每次和自己前一个数据比较,后面数据小交换,有几个数据循环遍历几次
public static void doubleSort(int [] nums){
if (nums==null||nums.length==0)
{return;
}
for (int i=0;i<nums.length;i++){
for (int j=1;j<nums.length;j++){
//和自己上个数据比较
if (nums[j-1]>nums[j]){
int temp = nums[j];
nums[j]=nums[j-1];
nums[j-1]=temp;
}
}
}
}
public static void main(String[] args) {
int[] nums={2,5,3,8,6};
selectSort(nums);
System.out.println(Arrays.toString(nums));
}
}