快速排序的主要思路是每次选择一个中间的数mid,根据这个数将整组数据中比这个数小的数放在这个数左边的位置,比这个数大的数放在这个数右边的位置。接着再对以这个数为基础左右两边的数据进行排序。
若以数组数据存储数据,Java代码实现如下:
public static void quickSort(int data[] , int low , int high) {
if(low<high){
int mid = partation(data, low, high);
quickSort(data,low,mid-1);
quickSort(data,mid+1,high);
}
}
public static int partation(int data[], int low, int high){
int val = data[low];
while(low<high){
while(low<high&&data[high]>val){
high--;
}
data[low]=data[high];
while(low<high&&data[low]<val){
low++;
}
data[high]=data[low];
}
data[low]=val;
return low;
}
若以链表存储数据,实现代码如下:
public static ListNode quickSortList(ListNode head) {
if(head==null||head.next==null)
return head;
quickSort(head,null);
return head;
}
public static void quickSort(ListNode begin,ListNode end){
if(begin!=end){
ListNode mid = partation(begin , end);
quickSort(begin,mid);
quickSort(mid.next,end);
}
}
public static ListNode partation(ListNode begin,ListNode end){
ListNode p=begin;
ListNode q=p.next;
int val=begin.val;
int temp;
while(q!=end){
if(q.val<val){
p=p.next;
temp=p.val;
p.val=q.val;
q.val=temp;
}
q=q.next;
}
begin.val=p.val;
p.val=val;
return p;
}