快速排序

1.一个无序的数组,设置两个变量,一个left,一个right(left从数组左端开始,向右移动;right从数组右端开始,向左移动)

2.保证left左边的数据都小于left

3.保证right右边的数据都大于right

注意事项:(最省内存的快速排序,不多费哪怕一点力气,就要像我这样做)

1.最外层循环,确定left和right,left是i,right是length-i-1 

  注意:为什么最外层循环直到length/2就结束了?

    试想一下,如果是length是偶数(假如是6),那么length/2 = 3,left到第3个,right到第4个,显然比较已经结束了

        假如length是奇数(假如是5),那么length/2  = 2, left到第2个,right到第4个,中间第三个肯定比left大,也肯定比right小,排序显然已经完成,不需要再比了

2.假如你做的和我一样,先是left和右边比,后right和左边比

  注意:left比较的时候,一定是从left右边第一个开始,比较到right,同时一定要注意和right比较(为什么呢,试想如果是 2,1,0这样,你比较的时候left不和right比较的话,显然right不一定比left小)

      那么如果left和right比较过了,显然right和left比较的时候就可以省去和left比较了

 

package test;

public class Demo {
	
	//快读排序
	public static void kspx(int[] index){
		
		//i is left ;       index.length-i-1 is right
		for (int i = 0; i < index.length/2; i++) {
			//left和右边的比较 
			for (int j = i+1; j < index.length-i; j++) {
				if(index[i]>index[j]){
					int temp = index[i];
					index[i] = index[j];
					index[j] = temp;
				}
			}
			//right和左边的比较
			for (int j = i+1; j < index.length-i-1; j++) {
				if(index[index.length-i-1]<index[j]){
					int temp = index[index.length-i-1];
					index[index.length-i-1] = index[j];
					index[j] = temp;
				}
			}
		}
		for (int i = 0; i < index.length; i++) {
			System.out.print(index[i]+" ,");
		}
	}
	public static void main(String[] args) {
		int[] index = {8,9,4,5,5,3,6,4,96,9,5,5,65,26,0,1};
		new Demo().kspx(index);
	}

}

  

posted @ 2014-07-23 15:52  刘尊礼  阅读(154)  评论(0)    收藏  举报