您的位置:首页 > 理论基础 > 数据结构算法

数据结构学习笔记( 3 )快速排序

2019-08-01 17:46 375 查看
版权声明:本文为博主原创文章,遵循 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) ,一般情况下快速排序速度快于冒泡排序.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: