快速排序方法

xiaoxiao2021-02-28  18

快速排序算法是对冒泡排序算法的一种改进,由于冒泡排序是对相邻的数据进行两两比较,元素的移动次数和比较次数都比较多,而快速排序是从记录序列的两端向中间进行的,所以元素的移动次数和比较次数上都较少了。

快速排序的基本思想是,选定一个比较的基准,即轴值,将待排序的记录分割成独立的两个部分,左侧记录的关键码都小于或者等于轴值,右边的记录关键码都大于或等于关键码,然后对这两部分分别重复上述过程,直到整个序列有序。

关键代码为:

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  

转载请注明原文地址: https://www.6miu.com/read-800142.html

最新回复(0)