C++ 快速排序 的问题!!!!求助求助。
本帖最后由 十二月的萧邦 于 2020-3-30 13:13 编辑和甲鱼哥那个快速排序好像有点区别???
要求用到三个函数:
void quicksort( int * const, int, int );
int partition( int * const, int, int );
void swap( int * const, int * const );
quicksort是递归函数,调用partition函数进行分区。
没太理解用三个函数这样怎么做,写了一半不会了,不知道思路对不对。
求解答。
我写的如下:
#include<iostream>
using namespace std;
void quickSort(int* const, int, int);
int partition(int* const, int, int);
void swap(int&,int&);
void quickSort(int* const a, int left, int right)
{
if (left >= right)return;
int pivot = partition(a, left, right);
quickSort(a, left, pivot - 1);
quickSort(a, pivot + 1, right);
}
int partition(int* const a, int l, int r)//对从a到a的数组,找到a的位置,并返回l的值
{
while (l < r)
{
}
return l;
}
void swap(int &x,int &y)
{
int temp = x;
x = y;
y = temp;
}
int main()
{
int a = { 6,5,8,9,10,1,4,3,2,7 };
void printarray(int[]);
cout << "Before:\n";
printarray(a);
quickSort(a, 0, 9);
cout << "\nAfter:\n";
printarray(a);
return 0;
}
void printarray(int a[])
{
for (int i = 0; i < 10; ++i)
{
cout.width(4);
cout << a;
}
} 顶一下{:10_257:} 再顶一下{:10_285:} 感觉swap函数有点多余
#include <stdio.h>
int partition(int k[], int low, int high) {
int key = k;
while(low < high) {
while(low < high && key <= k)
--high;
k = k;
while(low < high && key >= k)
++low;
k = k;
}
k = key;
return low;
}
void qsort(int k[], int low, int high) {
if(low >= high) return;
int point = partition(k, low, high);
qsort(k, low, point - 1);
qsort(k, point + 1, high);
}
int main(void) {
int a = {4, 2, 5, 0, 3, 9, 1, 7, 6, 8};
qsort(a, 0, 9);
for(int i = 0; i < 10; ++i) {
printf("%d ", a);
}
printf("\n");
return 0;
}
参考 https://baike.baidu.com/item/快速排序算法/369842?fromtitle=快速排序&fromid=2084344&fr=aladdin
页:
[1]