【注意,本人小白一个,以下是个人根据教程的理解,如有疑惑,出错的地方,希望大家能够留言指出来,相互学习进步。】
快速排序是一个用时短的一个数组排序(目前学到的应用是数组)
快速排序的第一次第一个for循环原理是取出第一个元素,对数组后面的元素进行比较,
如果比较的元素比原始的元素数值还小,这把这个比较的数值和原始互换位置。
第二次第一个for循环取出第二个元素与整个元素进行比较,遇到比之还小的元素,执行互换位置,
第三次第一个for循环......
循环直到数组排序完成从小到大排序。
/*【快速排序】
* 快速遍历思路,结合运行结果来分析
* 快速遍历的原理是把最小的值放在最左边,
* 相对大的值,就放在右边。
* 2018年3月17日
*/
public class hello_world {
public static void main(String[] args) {
int[] intArray = { 12, 11, 45, 6, 8, 43, 40, 57, 3, 20 };
int keyValue;
int index;
int temp;
System.out.println("排序前的数组:");
for (int i = 0; i < intArray.length; i++){
System.out.print(intArray[i] + " ");
}
System.out.println();//换行
for (int i = 0; i < intArray.length; i++) {
index = i;
System.out.println("第一个循环下标index="+index);
keyValue = intArray[i];
System.out.println("keyValue:"+keyValue);
for (int j = i; j < intArray.length; j++){
System.out.println("intArray[j="+j+"]="+intArray[j] );
if (intArray[j] < keyValue) {
System.out.println("判断:intArray[j="+j+"]="+intArray[j] );
System.out.println("判断:keyValue:"+keyValue);
index = j;
System.out.println("判断:index=j:"+index);
keyValue = intArray[j];
System.out.println("判断:keyValue = intArray[j="+j+"]:"+keyValue);
}
System.out.println("===============================【里循环】");
}
temp = intArray[i];
System.out.println("判断:temp:"+temp);
intArray[i] = intArray[index];
System.out.println("判断:intArray[i="+i+"]=intArray[index="+index+"]:"+intArray[i]);
intArray[index] = temp;
System.out.println("判断:intArray[index="+index+"]:"+intArray[index]);
System.out.println("第"+(i+1)+"次数组遍历");
for(int k=0;k<intArray.length;k++){
System.out.print(intArray[k]+" ");
}
System.out.println("");
System.out.println("【外循环】********************************");
}
System.out.println("排序后的数组");
for(int i=0;i<intArray.length;i++){
System.out.print(intArray[i]+" ");
}
}
}
控制台结果
排序前的数组:
12 11 45 6 8 43 40 57 3 20
第一个循环下标index=0
keyValue:12
intArray[j=0]=12
===============================【里循环】
intArray[j=1]=11
判断:intArray[j=1]=11
判断:keyValue:12
判断:index=j:1
判断:keyValue = intArray[j=1]:11
===============================【里循环】
intArray[j=2]=45
===============================【里循环】
intArray[j=3]=6
判断:intArray[j=3]=6
判断:keyValue:11
判断:index=j:3
判断:keyValue = intArray[j=3]:6
===============================【里循环】
intArray[j=4]=8
===============================【里循环】
intArray[j=5]=43
===============================【里循环】
intArray[j=6]=40
===============================【里循环】
intArray[j=7]=57
===============================【里循环】
intArray[j=8]=3
判断:intArray[j=8]=3
判断:keyValue:6
判断:index=j:8
判断:keyValue = intArray[j=8]:3
===============================【里循环】
intArray[j=9]=20
===============================【里循环】
判断:temp:12
判断:intArray[i=0]=intArray[index=8]:3
判断:intArray[index=8]:12
第1次数组遍历
3 11 45 6 8 43 40 57 12 20
【外循环】********************************
第一个循环下标index=1
keyValue:11
intArray[j=1]=11
===============================【里循环】
intArray[j=2]=45
===============================【里循环】
intArray[j=3]=6
判断:intArray[j=3]=6
判断:keyValue:11
判断:index=j:3
判断:keyValue = intArray[j=3]:6
===============================【里循环】
intArray[j=4]=8
===============================【里循环】
intArray[j=5]=43
===============================【里循环】
intArray[j=6]=40
===============================【里循环】
intArray[j=7]=57
===============================【里循环】
intArray[j=8]=12
===============================【里循环】
intArray[j=9]=20
===============================【里循环】
判断:temp:11
判断:intArray[i=1]=intArray[index=3]:6
判断:intArray[index=3]:11
第2次数组遍历
3 6 45 11 8 43 40 57 12 20
【外循环】********************************
第一个循环下标index=2
keyValue:45
intArray[j=2]=45
===============================【里循环】
intArray[j=3]=11
判断:intArray[j=3]=11
判断:keyValue:45
判断:index=j:3
判断:keyValue = intArray[j=3]:11
===============================【里循环】
intArray[j=4]=8
判断:intArray[j=4]=8
判断:keyValue:11
判断:index=j:4
判断:keyValue = intArray[j=4]:8
===============================【里循环】
intArray[j=5]=43
===============================【里循环】
intArray[j=6]=40
===============================【里循环】
intArray[j=7]=57
===============================【里循环】
intArray[j=8]=12
===============================【里循环】
intArray[j=9]=20
===============================【里循环】
判断:temp:45
判断:intArray[i=2]=intArray[index=4]:8
判断:intArray[index=4]:45
第3次数组遍历
3 6 8 11 45 43 40 57 12 20
【外循环】********************************
第一个循环下标index=3
keyValue:11
intArray[j=3]=11
===============================【里循环】
intArray[j=4]=45
===============================【里循环】
intArray[j=5]=43
===============================【里循环】
intArray[j=6]=40
===============================【里循环】
intArray[j=7]=57
===============================【里循环】
intArray[j=8]=12
===============================【里循环】
intArray[j=9]=20
===============================【里循环】
判断:temp:11
判断:intArray[i=3]=intArray[index=3]:11
判断:intArray[index=3]:11
第4次数组遍历
3 6 8 11 45 43 40 57 12 20
【外循环】********************************
第一个循环下标index=4
keyValue:45
intArray[j=4]=45
===============================【里循环】
intArray[j=5]=43
判断:intArray[j=5]=43
判断:keyValue:45
判断:index=j:5
判断:keyValue = intArray[j=5]:43
===============================【里循环】
intArray[j=6]=40
判断:intArray[j=6]=40
判断:keyValue:43
判断:index=j:6
判断:keyValue = intArray[j=6]:40
===============================【里循环】
intArray[j=7]=57
===============================【里循环】
intArray[j=8]=12
判断:intArray[j=8]=12
判断:keyValue:40
判断:index=j:8
判断:keyValue = intArray[j=8]:12
===============================【里循环】
intArray[j=9]=20
===============================【里循环】
判断:temp:45
判断:intArray[i=4]=intArray[index=8]:12
判断:intArray[index=8]:45
第5次数组遍历
3 6 8 11 12 43 40 57 45 20
【外循环】********************************
第一个循环下标index=5
keyValue:43
intArray[j=5]=43
===============================【里循环】
intArray[j=6]=40
判断:intArray[j=6]=40
判断:keyValue:43
判断:index=j:6
判断:keyValue = intArray[j=6]:40
===============================【里循环】
intArray[j=7]=57
===============================【里循环】
intArray[j=8]=45
===============================【里循环】
intArray[j=9]=20
判断:intArray[j=9]=20
判断:keyValue:40
判断:index=j:9
判断:keyValue = intArray[j=9]:20
===============================【里循环】
判断:temp:43
判断:intArray[i=5]=intArray[index=9]:20
判断:intArray[index=9]:43
第6次数组遍历
3 6 8 11 12 20 40 57 45 43
【外循环】********************************
第一个循环下标index=6
keyValue:40
intArray[j=6]=40
===============================【里循环】
intArray[j=7]=57
===============================【里循环】
intArray[j=8]=45
===============================【里循环】
intArray[j=9]=43
===============================【里循环】
判断:temp:40
判断:intArray[i=6]=intArray[index=6]:40
判断:intArray[index=6]:40
第7次数组遍历
3 6 8 11 12 20 40 57 45 43
【外循环】********************************
第一个循环下标index=7
keyValue:57
intArray[j=7]=57
===============================【里循环】
intArray[j=8]=45
判断:intArray[j=8]=45
判断:keyValue:57
判断:index=j:8
判断:keyValue = intArray[j=8]:45
===============================【里循环】
intArray[j=9]=43
判断:intArray[j=9]=43
判断:keyValue:45
判断:index=j:9
判断:keyValue = intArray[j=9]:43
===============================【里循环】
判断:temp:57
判断:intArray[i=7]=intArray[index=9]:43
判断:intArray[index=9]:57
第8次数组遍历
3 6 8 11 12 20 40 43 45 57
【外循环】********************************
第一个循环下标index=8
keyValue:45
intArray[j=8]=45
===============================【里循环】
intArray[j=9]=57
===============================【里循环】
判断:temp:45
判断:intArray[i=8]=intArray[index=8]:45
判断:intArray[index=8]:45
第9次数组遍历
3 6 8 11 12 20 40 43 45 57
【外循环】********************************
第一个循环下标index=9
keyValue:57
intArray[j=9]=57
===============================【里循环】
判断:temp:57
判断:intArray[i=9]=intArray[index=9]:57
判断:intArray[index=9]:57
第10次数组遍历
3 6 8 11 12 20 40 43 45 57
【外循环】********************************
排序后的数组
3 6 8 11 12 20 40 43 45 57