插入排序算法的生活场景排队,大家在读小学的时候有过排队的经历吧,当时老师就是让没有排好序的同学出来一个,让他从后往前和已经排好序的同学依次比较比他高的就往后挪一位直到找到比他矮的,就插到这位同学的后面。用java代码实现就是:
int j;
for(int i=2;i<a.length();i++){//a[0]是哨兵,第一个元素是有序的。
a[0]=a[i];
for(j=i-1;j>=0;j--){
if(a[j]>a[0]){
a[j+1]=a[j];}
else{
a[j+1]=a[0];
break;
}
}
}
快速排序的生活场景,大家应该都有过撕纸的经历,不断对折撕,直到撕不动了(终止条件),其实快速排序原理也是如此,从数组取一个元素作为对折点,将数组分割成大于对折点和小于对折点的二个小数组,然后不断执行这个步骤,数组剩下一个或零个元素(也就是该数组不可以再分割了)。经过处理后的对折点一定在排好序数组的正确位子上
。
if(a.length()<=1){
return;
}
int k=a[0],i=0,j=a.length()-1;
boolean flag=true;
while(i<j){
if(flag){
if(a[j]>k){
j--;
}else{
a[i++]=a[j];
flag=false;
}
}
if(!flag){
if(a[i]<k){
i++;
}else{
a[j++]=a[i];
flag=true;
}
}
}
a[i]=k;
quicksort(Arrays.copyOfRange(a, 0,i));
quicksort(Arrays.copyOfRange(a,i+1,a.length()));