欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

快速排序

程序员文章站 2022-07-10 17:39:10
一、特定的数字数字 二、冒泡排序 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