快速排序算法简介
快速排序是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1962年提出。快速排序的原理是,选择数组中的一个元素作为基准值,然后遍历其他元素,将小于基准值的元素放置在左边,将大于基准值的元素放置在右边。如是你可以得到两个子数组,再依次对子数组进行快速排序,最终完成排序。
快速排序算法的作用
快速排序是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1962年提出。快速排序的原理是,选择数组中的一个元素作为基准值,然后遍历其他元素,将小于基准值的元素放置在左边,将大于基准值的元素放置在右边。如是你可以得到两个子数组,再依次对子数组进行快速排序,最终完成排序。
快速排序算法的作用
刚才也说了快速排序算法是对冒泡算法的一种改进,所以快速排序算法与冒泡算法相类似,就是对无序的序列进行排序,使无序的序列成为有序的序列。就像我们一屋子的杂物,经过我们的整理,可以变得井然有序。
快速排序算法实现(java)
1.初始化:
选取基元P=2,就是数组首元素。i=1,j=i+1=2 (数组下标以1开头)
2.循环不变量:
2~i之间的元素都小于或等于P,i+1~j之间的元素都大于或等于P
3.循环过程:
j从2到n,考察j位置的元素,如果大于等于P,就继续循环。如果小于P,就将j位置的元素(不应该出现在i+1~j这个区间)和i+1位置(交换之后仍在i+1~j区间)的元素交换位置,同时将i+1.这样就维持了循环不变量(见上述循环不变量说明)。直到j=n,完成最后一次循环操作。
java代码实现:
public class QuickSort {
private static void QuickSort(int[] array,int start,int end)
{
if(start<end)
{
int key=array[start];//初始化保存基元
int i=start,j;//初始化i,j
for(j=start+1;j<=end;j++)
{
if(array[j]<key)//如果此处元素小于基元,则把此元素和i+1处元素交换,并将i加1,如大于或等于基元则继续循环
{
int temp=array[j];
array[j]=array[i+1];
array[i+1]=temp;
i++;
}
}
array[start]=array[i];//交换i处元素和基元
array[i]=key;
QuickSort(array, start, i-1);//递归调用
QuickSort(array, i+1, end);
}
}
public static void main(String[] args)
{
int[] array = new int[] { 1, 3, 5, 9, 0, 6, 7, 8, 2, 4 };
QuickSort(array, 0, array.length-1);
for(int i=0;i<array.length;i++)
{
System.out.println((i+1)+"th:"+array[i]);
}
}
}
效果如下: