首页 > 其他分享 >快速排序——C语言描述

快速排序——C语言描述

时间:2023-03-10 22:56:51浏览次数:52  
标签:Arr int 22% C语言 ------- ---------- Test 排序 描述

快速排序——C语言描述

目录

0 测试用例框架

https://blog.csdn.net/m0_59469991/article/details/127137119?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22127137119%22%2C%22source%22%3A%22m0_59469991%22%7D

1 定义

核心:就是让元素回到自己的位置。

注意:

1 i, j需要定义,因为递归部分需要用到;

2 哪边做哨兵,另一边先移动;

3 当移动指针时,相等时也要移动,注意加上i,j范围的判断;

4 可以用手做意向进行想象。

参考链接:

https://blog.csdn.net/weixin_43296982/article/details/123098472?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167845920716800192277020%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167845920716800192277020&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-2-123098472-null-null.142

2 代码

/*QuickSort*/
//{ 5, 2, 6, 3, 1, 4 }
void QuickSort(int *Arr, int Low, int High) {
	int i = Low;
	int j = High;
	int FlagValue = Arr[Low];
	int Tmp;

	if ((Arr == NULL) || (i > j)) {
		return ;
	}

	while (i < j) {
		while ((Arr[j] >= FlagValue) && (i < j)) {
			--j;
		}

		while ((Arr[i] <= FlagValue) && (i < j)) {
			++i;
		}

		if (i < j) {
			Tmp = Arr[i];
			Arr[i] = Arr[j];
			Arr[j] = Tmp;
		}
	}

	Arr[Low] = Arr[i];
	Arr[i] = FlagValue;

	QuickSort(Arr, Low, i - 1);
	QuickSort(Arr, i + 1, High);
}

4 测试用例

/*TestQuickSort*/
void TestQuickSort(void) {
	/*Test01: Normal*/
	int Arr01[] = { 5, 2, 6, 3, 1, 4 };
	int Num01 = 6;
	int Low01 = 0;
	int High01 = Num01 - 1;
	int CmpArr01[] = { 1, 2, 3, 4, 5, 6 };

	/*Test02: Normal*/
	int Arr02[] = { 8, 7, 6, 5, 4, 3, 2, 1};
	int Num02 = 8;
	int Low02 = 0;
	int High02 = Num02 - 1;
	int CmpArr02[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

	/*Test03: Normal*/
	int Arr03[] = { 0};
	int Num03 = 1;
	int Low03 = 0;
	int High03 = Num03 - 1;
	int CmpArr03[] = { 0};

	printf("-------Test start----------\n");
	InitNum();

	/*Test01*/
	printf("\n-------Test 01----------\n");
	QuickSort(Arr01, Low01, High01);
	PrintArr(Arr01, Num01);
	TestCmpArr(CmpArr01, Num01, Arr01);

	/*Test02*/
	printf("\n-------Test 02----------\n");
	QuickSort(Arr02, Low02, High02);
	PrintArr(Arr02, Num02);
	TestCmpArr(CmpArr02, Num02, Arr02);

	/*Test03*/
	printf("\n-------Test 03----------\n");
	QuickSort(Arr03, Low03, High03);
	PrintArr(Arr03, Num03);
	TestCmpArr(CmpArr03, Num03, Arr03);

	/*Test Result*/
	printf("\n-------Test result----------\n");
	TestResult();
}

打印结果

-------Test start----------

-------Test 01----------

Arr[0] = 1

Arr[1] = 2

Arr[2] = 3

Arr[3] = 4

Arr[4] = 5

Arr[5] = 6

-------Test 02----------

Arr[0] = 1

Arr[1] = 2

Arr[2] = 3

Arr[3] = 4

Arr[4] = 5

Arr[5] = 6

Arr[6] = 7

Arr[7] = 8

-------Test 03----------

Arr[0] = 0

-------Test result----------

Print test result;

TestNum = 3, PassNum = 3, FaildNum = 0

标签:Arr,int,22%,C语言,-------,----------,Test,排序,描述
From: https://www.cnblogs.com/meditatorss/p/17204899.html

相关文章

  • 使用脚本获取C语言函数声明
    #!/bin/bash#命令行参数检测if[-n"$1"];thenecho"Sourcefile:$1"elseecho"Usage:$0<source_file>"exit-1fisourcesfile=$1if[[-f$sourcesfile]];......
  • C语言:宏定义的妙用
    一、定义别名标识符在代码中为了提高可读性,把一些数字进行宏标识化,同时也方便后续修改(一处修改,到处生效),#define YEAR_COUNT_SEC  (365*24*60*60)UL二、连接符“\”sta......
  • C语言整型提升
    当定义一个char类型的数据a,给其赋值10,即chara=10;对于char类型的数据,在使用printf函数输出的时候,应该用%c,但我们想要用%d来输出类型为char的数据时,就会发生整型提升,将a由......
  • C语言之数据的存储(一)(整型数据)
    一、整型数据在内存中的存储1.1整型数据家族char,short,intlong(每种类型又分为unsigned和signed,例如,signedchar,unsignedchar)1.2整型数据的存储对于整型数据,其在计......
  • Qz学算法-数据结构篇(排序算法--插入、希尔)
    插入排序1.基本介绍插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。2.基本思想插入排序(InsertionSorting).的基本思想是......
  • 简单选择排序
    背景爱炒股票短线的人,总是喜欢不断的买进卖出,想通过价差来实现盈利。但通常这种频繁操作的人,即使失误不多,也会因为操作的手续费和印花税过高而获得很少。还有一种做股票......
  • 归并排序
    归并排序采用了分治的思想,以及递归的写法。[图解来源:排序算法:归并排序【图解+代码】]合并两个有序数组的示意图:[图解来源:图解排序算法(四)之归并排序]代码实现:class......
  • 初识C语言3/10
    循环语句:while循环:#include<stdio.h>intmain(){inti=1;while(i<=10){if(i==5)break;printf("%d\n",i);//1,2,3,4,5......
  • 【希尔排序ShellSort算法详解】Java/Go/Python/JS/C不同语言实现
    【希尔排序算法详解】Java/Go/Python/JS/C不同语言实现 说明希尔排序(ShellSort)是插入排序的一种改进版,也称递减增量排序算法(DiminishingIncrementSort),其实质是将数......
  • java学习日记20230310-排序
    排序 指将一组数据按照指定的顺序排列的过程分类:内部排序:指将需要处理的所有数据都加载到内存储存器中,进行排序,包括交换排序法,选择排序法,插入排序法外部排序:......