排序算法目录:
1.插入排序
2.希尔排序
3.选择排序
4.冒泡排序
5.快速排序
6.计数排序
7.堆排序
图解快速排序:
任取待排序元素序列中的某元素作为基准值key。
用key值与左右两端分别进行比较:
如果比右侧小,则右侧指针左移。如果比右侧大则交换,左侧指针右移。
如果比左侧大,则左侧指针右移。如果比左侧小则交换,右侧指针左移。
如图,5比1大,5和1位置交换,left++。
如图,5比9小,5与9交换位置,right- -。
如图,5比6小,right- -。
第一趟结束后:
以key值为分界线,分成左右两部分,左边比key小,右边比key大,再在两个区域分别指定key,依次重复该过程比较。
代码实现:
void QuickSort(int* array, int left, int right)//快速排序
{
int i = left;
int j = right;
if (left >= right)
{
return;
}
while (left < right)
{
int key = array[left];
while (left < right && key <= array[right])
{
right--;
}
if (key > array[right])
{
change(&array[left], &array[right]);
left++;
}
while (left < right && key >= array[left])
{
left++;
}
if (key < array[left])
{
change(&array[left], &array[right]);
right--;
}
}
QuickSort(array, i, left-1);
QuickSort(array, left+1, j);
}