深度剖析快速排序中的递归

深度剖析快速排序中的递归:

本篇文章为笔者的读书笔记,未经允许请勿转载。如果对你有帮助记得点个赞(●’◡’●)
本文主要对快排的过程讲解和对递归函数的过程化详细剖析。
源码如下

main.cpp

// 1排序.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
void random(vector<int>& vec)//随机数生成器
{
	random_device r;
	for (auto& e : vec)
	{
		e = r() % vec.size() + 1;
	}
}

void out(const vector<int>& vec)//输出函数
{
	for (const auto& e : vec)
	{
		cout << e << " ";
	}
	cout << endl;
}

void sortTest(function<void(vector<int>&)> sortFn)//测试函数
{
	vector<int> vec(1000);//生成1000个乱序数据存在vec中
	random(vec);
	out(vec);
	auto start = clock();//测试时间
	sortFn(vec);
	auto end = clock();
	out(vec);
	auto diff = (float)(end - start) / 1000;
	cout << diff << endl;
}

int _tmain(int argc, _TCHAR* argv[])//主函数,采用了预编译头(个人习惯)
{
	sortTest(sort::mergeSort);
	system("pause");
	return 0;
}
//测试结果
689 345 538 69 85 347 979 909 876 241 148 507 1 606 136 148 560 959 992 944 736 653 398 548 995 919 748 664 669 190 329 968 660 193 947 795 532 814 901 799 184 718 860 394 115 971 250 890 277 765 390 504 172 687 858 750 423 568 29 450 347 94 187 721 861 201 997 725 38 835 618 988 314 257 642 534 225 612 41 597 566 577 535 584 834 933 907 345 243 814 323 106 612 334 137 64 416 269 897 682 611 212 918 352 767 295 412 50 803 773 624 833 774 708 111 746 749 594 219 273 636 119 415 753 44 695 956 162 764 586 871 367 869 254 535 364 121 146 576 504 576 67 537 308 197 604 850 839 471 874 560 287 231 138 477 690 93 835 488 660 845 965 794 980 560 94 819 787 742 388 177 47 437 556 646 379 591 112 11 927 327 229 575 740 716 402 211 754 877 515 341 56 539 272 414 273 539 726 59 256 903 611 332 541 413 160 106 655 222 275 672 402 861 252 713 736 100 538 65 268 203 721 239 715 906 160 179 349 192 678 403 166 122 869 541 216 534 423 189 182 813 458 497 420 129 101 127 919 255 126 505 651 992 145 300 515 962 789 983 630 20 497 765 835 717 981 161 41 822 594 929 541 455 875 417 596 204 499 654 344 972 130 962 593 139 207 824 357 767 310 990 244 303 740 578 136 839 426 726 986 275 837 504 980 339 546 208 637 962 85 314 88 19 215 290 379 392 49 788 886 431 405 872 219 761 421 840 885 273 262 198 107 286 974 90 692 767 626 373 550 557 301 104 719 268 125 811 417 340 956 328 86 786 911 313 700 453 961 478 811 730 132 197 122 794 754 421 892 913 694 386 988 952 662 91 509 702 48 112 843 745 405 858 118 768 450 409 709 56 190 631 667 204 474 853 400 92 528 864 240 5 193 756 96 686 935 165 231 302 777 999 824 355 254 471 903 899 556 483 964 546 100 769 930 482 775 459 831 579 11 426 744 626 335 235 235 196 302 431 316 439 826 455 433 782 815 361 62 702 842 968 602 558 833 902 249 659 975 887 504 74 966 900 717 235 160 674 51 453 740 90 144 558 367 780 28 612 697 657 776 262 719 750 302 56 625 740 494 146 259 737 251 89 485 740 624 229 667 283 695 939 365 853 319 289 40 923 727 736 391 918 249 117 760 589 158 619 947 417 610 513 903 640 718 979 36 569 304 868 698 612 20 398 144 227 635 149 63 238 642 761 75 468 175 493 450 831 306 225 104 979 97 21 781 311 431 71 869 59 853 280 695 484 307 924 324 226 317 978 239 922 714 408 810 957 918 993 638 396 390 872 877 719 148 354 550 166 243 566 466 369 557 333 996 211 871 556 760 312 675 453 151 187 299 356 114 251 602 362 469 112 210 132 643 286 180 474 57 342 770 21 974 588 683 518 519 685 777 385 261 949 339 682 971 205 1000 662 705 718 714 985 81 548 219 101 712 3 403 608 499 189 67 521 944 80 842 72 821 578 795 123 109 859 728 357 4 51 570 218 583 443 785 749 90 616 139 709 370 54 170 619 554 553 195 718 279 124 381 682 494 870 280 35 650 274 442 813 442 274 816 984 314 46 782 947 145 299 34 731 480 637 550 460 439 624 946 677 902 365 566 276 651 818 598 420 777 736 848 261 544 905 100 735 731 949 637 926 621 924 767 36 110 200 954 898 140 407 291 333 857 13 66 834 440 259 499 904 926 436 164 529 865 490 115 357 818 4 951 302 537 162 690 518 546 833 185 227 760 2 585 969 321 250 328 737 336 734 269 461 459 336 667 434 345 411 174 698 782 757 768 703 603 72 203 512 739 851 65 375 845 787 450 707 494 999 110 455 782 485 553 207 652 14 998 433 147 422 669 65 490 123 585 124 499 891 779 816 978 206 815 731 69 678 762 149 928 81 655 21 20 594 984 176 949 825 369 438 386 73 444 471 452 660 514 670 39 520 910 8 442 799 437 13 409 745 717 325 851 376 234 144 143 210 377 409 74 65 27 86 830 516 280 497 140 240 958 642 162 752 295 347 356 289 123 836 774 237 56 377 213 806 449 529 947 298 413 500 221 603 973 130 582 880 166 341 880 395 359 924 27 726 886 888 409 205 93 709 433 138 649 620 493 175 831 259 920 984 465 165 565 80 525 640 873 196 617 641 314 883 298 307 21 903 730 485 947 199 975 347 576 94 878 482 132 5 152 797 81 843 524 243 123 870 36 310 464 523 183 445 481 483 767 561 523 797 617 784 826 440 169
1 2 3 4 4 5 5 8 11 11 13 13 14 19 20 20 20 21 21 21 21 27 27 28 29 34 35 36 36 36 38 39 40 41 41 44 46 47 48 49 50 51 51 54 56 56 56 56 57 59 59 62 63 64 65 65 65 65 66 67 67 69 69 71 72 72 73 74 74 75 80 80 81 81 81 85 85 86 86 88 89 90 90 90 91 92 93 93 94 94 94 96 97 100 100 100 101 101 104 104 106 106 107 109 110 110 111 112 112 112 114 115 115 117 118 119 121 122 122 123 123 123 123 124 124 125 126 127 129 130 130 132 132 132 136 136 137 138 138 139 139 140 140 143 144 144 144 145 145 146 146 147 148 148 148 149 149 151 152 158 160 160 160 161 162 162 162 164 165 165 166 166 166 169 170 172 174 175 175 176 177 179 180 182 183 184 185 187 187 189 189 190 190 192 193 193 195 196 196 197 197 198 199 200 201 203 203 204 204 205 205 206 207 207 208 210 210 211 211 212 213 215 216 218 219 219 219 221 222 225 225 226 227 227 229 229 231 231 234 235 235 235 237 238 239 239 240 240 241 243 243 243 244 249 249 250 250 251 251 252 254 254 255 256 257 259 259 259 261 261 262 262 268 268 269 269 272 273 273 273 274 274 275 275 276 277 279 280 280 280 283 286 286 287 289 289 290 291 295 295 298 298 299 299 300 301 302 302 302 302 303 304 306 307 307 308 310 310 311 312 313 314 314 314 314 316 317 319 321 323 324 325 327 328 328 329 332 333 333 334 335 336 336 339 339 340 341 341 342 344 345 345 345 347 347 347 347 349 352 354 355 356 356 357 357 357 359 361 362 364 365 365 367 367 369 369 370 373 375 376 377 377 379 379 381 385 386 386 388 390 390 391 392 394 395 396 398 398 400 402 402 403 403 405 405 407 408 409 409 409 409 411 412 413 413 414 415 416 417 417 417 420 420 421 421 422 423 423 426 426 431 431 431 433 433 433 434 436 437 437 438 439 439 440 440 442 442 442 443 444 445 449 450 450 450 450 452 453 453 453 455 455 455 458 459 459 460 461 464 465 466 468 469 471 471 471 474 474 477 478 480 481 482 482 483 483 484 485 485 485 488 490 490 493 493 494 494 494 497 497 497 499 499 499 499 500 504 504 504 504 505 507 509 512 513 514 515 515 516 518 518 519 520 521 523 523 524 525 528 529 529 532 534 534 535 535 537 537 538 538 539 539 541 541 541 544 546 546 546 548 548 550 550 550 553 553 554 556 556 556 557 557 558 558 560 560 560 561 565 566 566 566 568 569 570 575 576 576 576 577 578 578 579 582 583 584 585 585 586 588 589 591 593 594 594 594 596 597 598 602 602 603 603 604 606 608 610 611 611 612 612 612 612 616 617 617 618 619 619 620 621 624 624 624 625 626 626 630 631 635 636 637 637 637 638 640 640 641 642 642 642 643 646 649 650 651 651 652 653 654 655 655 657 659 660 660 660 662 662 664 667 667 667 669 669 670 672 674 675 677 678 678 682 682 682 683 685 686 687 689 690 690 692 694 695 695 695 697 698 698 700 702 702 703 705 707 708 709 709 709 712 713 714 714 715 716 717 717 717 718 718 718 718 719 719 719 721 721 725 726 726 726 727 728 730 730 731 731 731 734 735 736 736 736 736 737 737 739 740 740 740 740 740 742 744 745 745 746 748 749 749 750 750 752 753 754 754 756 757 760 760 760 761 761 762 764 765 765 767 767 767 767 767 768 768 769 770 773 774 774 775 776 777 777 777 779 780 781 782 782 782 782 784 785 786 787 787 788 789 794 794 795 795 797 797 799 799 803 806 810 811 811 813 813 814 814 815 815 816 816 818 818 819 821 822 824 824 825 826 826 830 831 831 831 833 833 833 834 834 835 835 835 836 837 839 839 840 842 842 843 843 845 845 848 850 851 851 853 853 853 857 858 858 859 860 861 861 864 865 868 869 869 869 870 870 871 871 872 872 873 874 875 876 877 877 878 880 880 883 885 886 886 887 888 890 891 892 897 898 899 900 901 902 902 903 903 903 903 904 905 906 907 909 910 911 913 918 918 918 919 919 920 922 923 924 924 924 926 926 927 928 929 930 933 935 939 944 944 946 947 947 947 947 947 949 949 949 951 952 954 956 956 957 958 959 961 962 962 962 964 965 966 968 968 969 971 971 972 973 974 974 975 975 978 978 979 979 979 980 980 981 983 984 984 984 985 986 988 988 990 992 992 993 995 996 997 998 999 999 1000
0.002s

sort.h

#pragma once
#include<vector>
using std::vector;
class sort
{
private:
	static void quick(vector<int>& vec, int l, int r);
public:
	static void quickSort(vector<int>& vec);
};

sort.cpp

#include "stdafx.h"
#include "sort.h"
#include<algorithm>
using namespace std;
void sort::quickSort(vector<int>& vec)
{
	quick(vec, 0, vec.size() - 1);
}

void sort::quick(vector<int>& vec, int l, int r)
{
	if (l >= r) return;
	int i = l;
	int j = r;
	while (i < j)
	{
		while (vec[j] > vec[l]) j--;       //出循环的结果为vec[j]<=vec[l],所以这里是>号
		while (i<j&&vec[i] <= vec[l]) i++; //出循环的结果为vec[i]>vec[l],所以这里是<=号
		if (i<j) swap(vec[i], vec[j]);
	}
	swap(vec[l], vec[i]);
	quick(vec, l, i - 1);                  //继续排序左边的数据
	quick(vec, i + 1, r);                  //继续排序右边的数据
}

下面是quick函数的详细解释,以及快排的过程讲解
采用的是5个数据的例子,更多数据以此类推即可
在这里插入图片描述

总结,搞懂回来的那个地方怎么回事就行。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值