快速排序算法是一项非常有用而且高效的排序算法,运算复杂度为O(nlogn)量级,这个算法我是刚开始在学数据结构的时候上机做的一个程序,现在
算法:分治法,主要通过递归来实现
#include"iostream"
#include"math.h"
using namespace std;
int AdjustArray(int s[], int l, int r){
int i = l, j = r, X = s[i];
while (i < j){
//find a number that is less than X
while (i < j && s[j] >= X)//从右向左找
j--;
if (i < j){
s[i] = s[j];
i++;
}
while (i < j && s[i] <= X){
i++;
}
if (i < j){
s[j] = s[i];
j--;
}
}
//将基准值放入最后一个空
s[i] = X;
return i;
}
void myquick_sort(int s[], int l, int r){
if (l < r)
{
int i = AdjustArray(s, l, r);
myquick_sort(s, l, i - 1);
myquick_sort(s, i + 1, r);
}
}
/*如果用一个函数的话,可以将两个函数放在一起*/
/*
void qsort_add(int s[], int l, int r){
if (l < r)
{
int i = l, j = r, X = s[i];
while (i < j){
//find a number that is less than X
while (i < j && s[j] >= X)//从右向左找
j--;
if (i < j){
s[i] = s[j];
i++;
}
while (i < j && s[i] <= X){
i++;
}
if (i < j){
s[j] = s[i];
j--;
}
}
//将基准值放入最后一个空
s[i] = X;
myquick_sort(s, l, i - 1);
myquick_sort(s, i + 1, r);
}
}
*/
//交换两个值的算法,如果用C语言写的话,记得要用指针引用,否则只能传值,函数调用结束后,原本的数组顺序还是没变。
void exchange(int a[]){
int temp;
for (int i = 0; i < 10 / 2; i++)
{
temp = a[i];
a[i] = a[9 - i];
a[9 - i] = temp;
}
}
int main()
{
int length = 10;
int *a = new int[10];
for (int i = 0; i < length; i++)
{
*(a + i) = int(rand()%17);
cout << a[i] << ' ';
}
cout << endl<<"original series is\n";
for (int i = 0; i < length; i++)
cout << a[i] << ' ';
cout << endl;
exchange(a);
cout << endl << "new series is\n";
for (int i = 0; i < length; i++)
cout << a[i] << ' ';
cout << endl;
qsort_plus(a, 0, 9);
for (int i = 0; i < length; i++)
cout << a[i] << ' ';
return 0;
}