快速排序算法是对冒泡排序算法的一种改进,由于冒泡排序是对相邻的数据进行两两比较,元素的移动次数和比较次数都比较多,而快速排序是从记录序列的两端向中间进行的,所以元素的移动次数和比较次数上都较少了。
快速排序的基本思想是,选定一个比较的基准,即轴值,将待排序的记录分割成独立的两个部分,左侧记录的关键码都小于或者等于轴值,右边的记录关键码都大于或等于关键码,然后对这两部分分别重复上述过程,直到整个序列有序。
关键代码为:
package bubble; public class Parti { public int partition(int[] r,int first,int end){//划分方法partition(); int i,j; i=first;j=end; //初始化 两端赋值为i和j while(i<j){ while(i<j&&r[i]<=r[j]) j--; //右侧扫描 if(i<j){ //将较小的记录交换到前面 int temp; temp=r[i]; r[i]=r[j]; r[j]=temp; } while(i<j&&r[i]<r[j]){ i++; //左侧扫描 } if(i<j){ //将较大的记录换到后面 int temp; temp=r[i]; r[i]=r[j]; r[j]=temp; } } return i;// } }
测试代码为:
public class Tp { //实例化对象 static Parti p=new Parti();//static 静态成员的标志关键词 public static void quick(int[] r,int first,int end){ //利用递归反复划分 if(first<end){ int pivot=p.partition(r, first, end); //调用划分函数 quick(r,first,pivot-1); quick(r,pivot+1,end); } } //程序入口 public static void main(String[] args) { int r[]={12,25,36,63,21,32,56,11}; System.out.println("待排序的记录序列是:"); for(int i=0;i<8;i++){ System.out.print(r[i]+" "); } quick(r,0,7); System.out.println("\n"+"排序好的记录是:"); for(int i=0;i<8;i++){ System.out.print(r[i]+" "); } } }
测试结果是:
待排序的记录序列是: 12 25 36 63 21 32 56 11 排序好的记录是: 11 12 21 25 32 36 56 63