数据结构与算法
排序
快速排序:
定义大小为 ARRSIZE 的int型数组,首先使用标准库stdlib中的(rand()%100)函数生成[0,100)的随机数,用于填充数组。再使用快速排序算法对其进行升序排序,快速排序的基本思路如下:
分治法+双指针
- 输入待排序列表、头指针、尾指针,判断头指针是否小于尾指针,若是–>2,否则–>4
- 使用partition函数确定pivot中点位置,当low<high情况下,使用双指针,与pivot比较大小,首尾交替调整位置,返回pivot索引
- 递归调用左右两个子列表–>1
- 结束算法
int partition(int arr[], int low, int high) {
int pivot = arr[low];
while (low < high) {
while (low < high && arr[high] >= pivot) {
high--;
}
arr[low] = arr[high];
while (low < high && arr[low] <= pivot) {
low++;
}
arr[high] = arr[low];
}
arr[low] = pivot;
return low;
}
void qSort(int arr[], int low, int high) {
if (low < high) {
int pivot = partition(arr, low, high);
qSort(arr, low, pivot - 1);
qSort(arr, pivot + 1, high);
}
}
void quickSort() {
int arr[ARRSIZE] = { 0 };
cout << "快速排序前数组为:" << endl;
for (int i = 0; i < ARRSIZE; i++) {
arr[i] = rand() % RANGE;
cout << arr[i];
if (i == ARRSIZE - 1) {
cout << endl;
}
else {
cout << ",";
}
}
qSort(arr,0,ARRSIZE-1);
cout << "快速排序后数组为:" << endl;
for (int i = 0; i < ARRSIZE; i++) {
cout << arr[i];
if (i == ARRSIZE - 1) {
cout << endl;
}
else {
cout << ",";
}
}
}