int Partition(int* data, int low, int high)
{
if (key <= data[high]) {
--high;
}
else {
data[low] = data[high];
++low;
break;
}
}
while (low < high) {
if (key >= data[low]) {
++low;
}
else {
data[high] = data[low];
--high;
break;
}
}
}
data[low] = key;
return low;
}
void Sort(int* data, int low, int high)
{
if (low < high) {
int key = Partition(data, low, high);
Sort(data, low, key - 1);
Sort(data, key + 1, high);
}
}
void InsertSort(int* data, int size)
{
for (int i = 1; i < size; ++i) {
for (int j = i; j > 0 && data[j] < data[j - 1]; --j) {
std::swap(data[j], data[j - 1]);
}
}
}
void BubbleSort(int* data, int size)
{
for (int i = 0; i < size - 1; ++i) {
for (int j = 0; j < size - 1 - i; ++j) {
if (data[j] > data[j + 1]) {
std::swap(data[j], data[j + 1]);
}
}
}
}
void SelectSort(int* data, int size)
{
for (int i = 0; i < size - 1; ++i) {
int min = i;
for (int j = i + 1; j < size; ++j) {
if (data[min] > data[j]) {
min = j;
}
}
if (min != i) {
std::swap(data[min], data[i]);
}
}
}
double GetClock()
{
const int TIME = 1000000;
struct timeval tv = { 0 };
gettimeofday(&tv, NULL);
long times = tv.tv_sec * TIME + tv.tv_usec;
double dReturn = times * 1.0 / TIME;
return dReturn;
}
int main()
{
srand(time(NULL));
const int SIZE = 100000;
int data[SIZE] = { 0 };
for (int i = 0; i < SIZE; ++i) {
data[i] = rand() % SIZE;
}
int size = sizeof(data) / sizeof(int);
double dRet1(0.0);
double dRet2(0.0);
dRet1 = GetClock();
// Sort(data, 0, size - 1);
Sort(data, 0, size - 1);
dRet2 = GetClock();
printf("time = {%f}\n", (dRet2 - dRet1));
// Display(data, data + size);
system("pause");
return 0;
{
int key = data[low];
while (low < high) {
while (low < high) {if (key <= data[high]) {
--high;
}
else {
data[low] = data[high];
++low;
break;
}
}
while (low < high) {
if (key >= data[low]) {
++low;
}
else {
data[high] = data[low];
--high;
break;
}
}
}
data[low] = key;
return low;
}
void Sort(int* data, int low, int high)
{
if (low < high) {
int key = Partition(data, low, high);
Sort(data, low, key - 1);
Sort(data, key + 1, high);
}
}
void InsertSort(int* data, int size)
{
for (int i = 1; i < size; ++i) {
for (int j = i; j > 0 && data[j] < data[j - 1]; --j) {
std::swap(data[j], data[j - 1]);
}
}
}
void BubbleSort(int* data, int size)
{
for (int i = 0; i < size - 1; ++i) {
for (int j = 0; j < size - 1 - i; ++j) {
if (data[j] > data[j + 1]) {
std::swap(data[j], data[j + 1]);
}
}
}
}
void SelectSort(int* data, int size)
{
for (int i = 0; i < size - 1; ++i) {
int min = i;
for (int j = i + 1; j < size; ++j) {
if (data[min] > data[j]) {
min = j;
}
}
if (min != i) {
std::swap(data[min], data[i]);
}
}
}
double GetClock()
{
const int TIME = 1000000;
struct timeval tv = { 0 };
gettimeofday(&tv, NULL);
long times = tv.tv_sec * TIME + tv.tv_usec;
double dReturn = times * 1.0 / TIME;
return dReturn;
}
int main()
{
srand(time(NULL));
const int SIZE = 100000;
int data[SIZE] = { 0 };
for (int i = 0; i < SIZE; ++i) {
data[i] = rand() % SIZE;
}
int size = sizeof(data) / sizeof(int);
double dRet1(0.0);
double dRet2(0.0);
dRet1 = GetClock();
// Sort(data, 0, size - 1);
Sort(data, 0, size - 1);
dRet2 = GetClock();
printf("time = {%f}\n", (dRet2 - dRet1));
// Display(data, data + size);
system("pause");
return 0;
}
冒泡: 52s
插入:33s
选择:11s
快速: 0.019s
可见对于数据规模比较大的数据来说, 快速还是一个比较好的方式;