#include "stdafx.h"
#include <iostream>
using namespace std;
void print(int data[], int n)
{
for (int i = 0; i < n; i++)
{
cout << data[i] << " ";
}
cout << endl;
}
void quick_ascending_sort(int data[], int len, int low, int high)
{
int i = 0, j = 0, temp = 0, d = 0;
if (low >= high)
{
return;
}
temp = data[low];
i = low;
j = high;
while (i < j)
{
/*比temp小的元素移到低端*/
while (i < j && data[j] >= temp)//
j--;
if (i < j)
data[i++] = data[j];
/*比temp大的元素移到高端*/
while (i < j && data[i] <= temp)
i++;
if (i < j)
data[j--] = data[i];
}
data[i] = temp;
cout << "temp:" << temp<< " : ";
print(data, len);
quick_ascending_sort(data, len, low, i - 1);
quick_ascending_sort(data, len, i + 1, high);
}
void quick_desending_sort(int data[], int low, int high)
{
int i = 0, j = 0, temp = 0, d = 0;
if (low >= high)
{
return;
}
temp = data[low];
i = low;
j = high;
while (i < j)
{
while (i < j && data[j] < temp)
j--;
if (i < j)
data[i++] = data[j];
while (i < j && data[i] > temp)
i++;
if (i < j)
data[j--] = data[i];
}
data[i] = temp;
quick_desending_sort(data, low, i - 1);
quick_desending_sort(data, i + 1, high);
}
int main()
{
int num[] = {5,3, 7,4,3,9,6,2,10,4,3,7,1};
int len = sizeof(num) / sizeof(int);
cout << "data count:"<< len << ". before sort: ";
print(num, len);
quick_ascending_sort(num, len, 0, len -1);
cout << "after ascending sort: ";
print(num, len);
quick_desending_sort(num, 0, len -1);
cout << "after desending sort: ";
print(num, len);
return 0;
}
測試結果
data count:13. before sort: 5 3 7 4 3 9 6 2 10 4 3 7 1
temp:5 : 1 3 3 4 3 4 2 5 10 6 9 7 7
temp:1 : 1 3 3 4 3 4 2 5 10 6 9 7 7
temp:3 : 1 2 3 3 3 4 4 5 10 6 9 7 7
temp:2 : 1 2 3 3 3 4 4 5 10 6 9 7 7
temp:3 : 1 2 3 3 3 4 4 5 10 6 9 7 7
temp:4 : 1 2 3 3 3 4 4 5 10 6 9 7 7
temp:10 : 1 2 3 3 3 4 4 5 7 6 9 7 10
temp:7 : 1 2 3 3 3 4 4 5 6 7 9 7 10
temp:9 : 1 2 3 3 3 4 4 5 6 7 7 9 10
after ascending sort: 1 2 3 3 3 4 4 5 6 7 7 9 10
after desending sort: 10 9 7 7 6 5 4 4 3 3 3 2 1
請按任意鍵繼續. . .