目录
前言
概述
源码:
主函数:
运行结果:
最好的期待是未来可期,
最好的相遇是开学有你。
想开学啦!!!
快速排序 Quick Sort 的基本思想是:通过 一趟排序将待排记录分割成独立的 两部分,
其中一部分记录的关键字均比另 部分记录的关键字小,
则可分别对这两部 分记录继续进行排序,以达到整个序列有序的目的。
废话不多说,接下来解释一下这个算法主要部分。
生成如下随机整数:
544 118 686 950 743 456 963 642 374 149 741 250 177 969 591 98;
我们需要做的第一步,就是先选取当中的一个关键字,比如选择第一个关键字 544,
然后想尽办法将它放到一个位置,使得它左边的值都比它小,右边的值都比它大,
第一次排序后:
98 118 177 250 149 456 374 544 642 963 741 743 950 969 591 686;
从上面结果可以看出,关键字 544左边的值都比其小,544右边的值都比其大。
544左边的值:98 118 177 250 149 456 374;
544右边的值: 642 963 741 743 950 969 591 686;
以上两个新的队列,又可以执行第一步。
我们可以很容易想到,这儿可以使用递归。
说到这儿,快速排序的思想基本就结束了,以下是个人在学习过程中实现的代码。
int* partition(int* ptr,int* low, int* high)
{
*ptr = *low;
while (true)
{
while (high != low)
{
if (*high < *ptr)
{
*low = *high;
break;
}
--high;
}
while (high != low)
{
if (*low>*ptr)
{
*high = *low;
break;
}
++low;
}
if (high == low)
{
*low = *ptr;
break;
}
}
return low;
}
void Qsort(int* ptr, int* low, int* high)
{
if (low < high)
{
int*pivotloc = partition(ptr, low, high);
Qsort(ptr, low, pivotloc - 1);
Qsort(ptr, pivotloc + 1,high );
}
}
void sortByQuickSort(int* dest, const unsigned int dataCnt)
{
int* ptr = (int*)calloc(sizeof(int), dataCnt + 1);
memcpy_s(ptr + 1, sizeof(int)*dataCnt, dest, sizeof(int)*dataCnt);
int* low = ptr + 1;
int* high = ptr + dataCnt;
Qsort(ptr, low, high);
memcpy_s(dest, sizeof(int)*dataCnt, ptr + 1, sizeof(int)*dataCnt);
}
#include
#include
using namespace std;
#include"dataStructAPI.h"
#include"sort.h"
#include
int main()
{
int array[16] = { 0 };
numberProducer.getFilledArray(array,16);
cout << " 原 始 数 据 :";
numberProducer.showArray(array,16);
sortByQuickSort(array, 16);
cout << "快 速 排 序 后 :";
numberProducer.showArray(array, 16);
sortByBubbleSort(array, 16);
cout << "冒 泡 排 序 后 :";
numberProducer.showArray(array, 16);
sortByShellInsert(array, 16, 3);
cout << "希尔插入排序后 :";
numberProducer.showArray(array, 16);
sortByBinarySearchInsert(array, 16);
cout << "折半插入排序后 :";
numberProducer.showArray(array, 16);
sortByDirectInsert(array, 16);
cout << "直接插入排序后 :";
numberProducer.showArray(array, 16);
system("pause");
return 0;
}