企业网站建设ppt介绍/郑州seo服务公司
第一趟的快速排序
先找基准数,一般来说就是选取数组里面第一个数为基准数
把基准数拿出来,那么这个数组就有一个坑,我们需要从右往左找第一个小于这个基准数的元素
j往前移动,发现3小于基准数,把3拿出来
把挖的坑放入j的位置,然后把3发在i的位置
i++往后找找到第一个大于基准数的位置,找到8,交换元素
然后j–找到第一个小于基准数的元素,交换
然后i++找第一个大于基准数的元素,交换
当ij都指向同一个元素的时候,把基准数填入这个坑里面结束
你会发现基准数左边都是比基准数小的元素,基准数右边的都是比基准数大的元素
第二次快速排序
经过上述的操作之后,我们找到了基准值4它所在的位置,然后分块继续进行快速排序,依此类推不再赘述
快速排序代码
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;void PrintArray(int arr[], int len)
{for (int i = 0; i < len; i++){cout << arr[i] << " ";}cout << endl;
}//快速排序 从小到大
void QuickSort(int arr[],int start,int end)
{int i = start;int j = end;//基准数int temp = arr[start];if (i < j){while (i < j){//从右向左去找比基准数小的while (i < j && arr[j] >= temp){j--;}//填坑if (i < j){arr[i] = arr[j];i++;}//从左向右去找比基准数大的数while (i < j && arr[i] < temp){i++;}//填坑if (i < j){arr[j] = arr[i];j--;}}//把基准数放入坑里arr[i] = temp;//对左半部分进行快速排序QuickSort(arr, start, i - 1);//对右半部分进行快速排序QuickSort(arr, i + 1, end);}
}int main()
{int myArr[] = { 4,2,8,0,5,7,1,3,9 };int len = sizeof(myArr) / sizeof(int);PrintArray(myArr, len);QuickSort(myArr, 0, len - 1);PrintArray(myArr, len);system("pause");return EXIT_SUCCESS;
}