快速排序
程序员文章站
2022-04-15 19:52:22
一、特定的数字数字 二、冒泡排序 1、思想:两层for循环,外层从第一个数到倒数第二个数,内层从外层的后面一个数到最后一个数 第1次内层循环,循环n-1次,找到最小数放到a0中,同时将原来a0的值赋值到原数组中最小数的位置; 第2次内层循环,循环n-2次,找到第二小的数放到a1中,同时将原来a1的值 ......
快速排序实现
#include <bits/stdc++.h>
using namespace std;
#define MAX 1e6+10;
int nArr[MAX];
int nNum;
void QuickSort(int *p, int nLeft, int nRight)
{
if(nLeft >= nRight)//当只有一个元素或没有元素时 直接返回
{
return;
}
//i j 指向的位置写法与下面while循环中的写法有关
//是为了每次执行完swap操作后 能够自动指向下一次的边界
int i = nLeft - 1;
int j = nRight + 1;
//选取数组中间的那个数字 作为对照
int nTemp = nArr[(nRight - nLeft)/2 + nLeft];
while(i < j)
{
//先i++
do i++; while(nArr[i] < nTemp);
//先j--
do j--; while(nArr[j] > nTemp);
if(i < j) swap(nArr[i], nArr[j]);
//为什么要先i++ j-- 就是在执行完swap之后 要向中间移动
}
//递归处理左右
//这里为什么边界是j呢?换成i行不行 留给大家思考吧!
QuickSort(p, nLeft, j);
QuickSort(p, j+1, nRight);
}
本文地址:https://blog.csdn.net/ZZHinclude/article/details/112006751