快速排序法实战入门(推荐)

Source

//主要思路:先选第一个数组的值记为基准数
    //从最后一个素组j的值开始与基准数比较,倒推(j--) 
    //当找到比基准数小的数值时,停止比较,
    //从第一个数组i的值开始与基准数比较,正推(i++)
    //当找到比基准数大的数值时,停止比较, 
    //将2个比较停止时数组的值交换 
    //交换结束后比较i与j的值,若不相等,重新进入第一个大while循环,
    //继续将j和i分别先倒退和后正推(记住先后顺序,很重要)
    //重复上述步骤,等i和j的位置数推到中间相等时,跳出大while循环
    废话少说直接上代码

建议读者直接复制在编译器上认真看谢谢

#include<stdio.h>//快速排序法(哨兵版)Quick_Sort是快速排序法的名字,
//格式是 Quick_Sort(a,b,c),a指数组名字,b和c指需要排序的数的位置
 //一般b和c都是0和n-1,指数组中的第一位和最后一位;
void Quick_Sort(int arr[], int begin, int end){
    if(begin > end) //要求条件是开始数的位置一定要小于结尾的数的位置,不然直接报错 
        return; 
    int temp = arr[begin]; //首先将第一位数组的值赋给temp 
    //主要思路:先选第一个数组的值记为基准数
	//从最后一个数组j的值开始与基准数比较,倒推(j--) 
	//当找到比基准数小的数值时,停止比较,
	//从第一个数组i的值开始与基准数比较,正推(i++)
	//当找到比基准数大的数值时,停止比较, 
	//将2个比较停止时数组的值交换 
	//交换结束后比较i与j的值,若不相等,重新进入第一个大while循环,
	//继续将j和i分别先倒推和后正推(记住先后顺序,很重要)
	//重复上述步骤,等i和j的位置数推到中间相等时,跳出大while循环
	// 
    int i = begin;//将第一位和最后一位的位置数分别赋给i和j 
    int j = end;
    while(i != j){//,重点背诵记忆只要两位置数不相等,执行循环,记住格式3个大while+1个替换步骤 
        while(arr[j] >= temp && j > i)//
            j--;//将最后的数的值倒数往前比较 ,倒推
        while(arr[i] <= temp && j > i)
            i++;//将前面的数的值倒数往后比较,正推
        if(j > i)//这个条件我感觉去不去掉都可以
		//为确保逻辑严谨性,还是保留吧 
		{
            int t = arr[i];
            arr[i] = arr[j];
            arr[j] = t;
        }
    }//跳出大while循环 ,此时已经确认第一个基准数的位置,重新循环上述大步骤 
    arr[begin] = arr[i];arr[i] = temp;//交换上一个基准数(第一次第一位)与停止时位置数的值
    Quick_Sort(arr, begin, i-1);//此处为递归,重述上述步骤 
    Quick_Sort(arr, i+1, end);}//运用到2分法的思想
	//具体就是把确定第一个基准数的位置作为分界点,左侧右侧一分为二
	//左侧和右侧的数组重复上述操作 

   int main() //主函数开始 
   { int arr[]={2,3,5,0,-5,-9,7,9,3,8};int i;//随便模拟了一些无规律10个的大小不同数 
    Quick_Sort(arr,0,9); //格式arr为 数组名字,0和9分别表示第一位和最后一位数组的位置数, 
    for(i=0;i<10;i++)//这期间的值依次按低到高排序 
    printf("%d ",arr[i]);//依次输出 
   	
   }
	//总结:快速排序法相比与插入排序法,冒泡排序法
	//它能够减少计算机的计算次数,提高效率,节省内存占用和减少计算时间
	//是一个非常值得学习的算法,建议读者跟着上述代码认真敲一遍
	//认真理解算法内容,本文主要借鉴参考了CSDN上其他文章的思路,链接如下,可以打开详细学习 

参考其他CSDN链接

建议读者打开认真看看快速排序法(详解)_小白的博客-CSDN博客_快速排序

已经停更一段时间了,很抱歉,我会继续努力的,加油,感谢每一位读者。