数据结构学习笔记( 3 )快速排序
2019-08-01 17:46
302 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41222732/article/details/98081576
快速排序一般选择数组的第一位 为基准数 .
从数组右侧开始寻找比基准数小的数,找到后暂停. 然后从左侧寻找一个比基准数大的数,找到后暂停 . 交换找到的两个 数在数组中的位置
继续第二行 第三行 的操作.最后在右侧和左侧重合的位置与数组首部的基准数交换.
使用递归将基准数左侧和右侧数组重复上述步骤.
#include <iostream> using namespace std; int arr[101], n; //交换两个数在数组中的位置 void exchange(int a,int b) { int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } void quicksort(int left, int right) { if (left > right) return; int temp = arr[left];//temp用来存放基准数 int i = left; int j = right; while (i!=j) { //从右往左寻找比基准数大的数 while (arr[j] >= temp && i < j) j--; //从左往右寻找比基准数小的数 while (arr[i] <= temp && i < j) i++; //交换两个数在数组中的位置 if (i < j) exchange(i, j); } //基准数归位 arr[left] = arr[i]; arr[i] = temp; quicksort(left, i - 1); quicksort(i + 1, right); return; } int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> arr[i]; quicksort(1, n);//调用快速排序数组 //输出排序结果 for (int i = 1; i <= n; i++) cout <<" "<< arr[i]; system("pause"); }
快速排序的优势在于排序效率更快,并且对于计算机空间更节约 快速排序的的平均时间复杂度为 O( NlogN ) ,冒泡排序的时间复杂度为 O (NN) , 快速排序在最糟糕的情况下时间复杂度为 O (NN) ,一般情况下快速排序速度快于冒泡排序.