排序算法:
// 冒泡
void sorta(int array[], int n)
{
for (int i = 0; i < n; i++)
{
for (int t = i + 1; t < n; t++)
{
if (array[i]>array[t])
{
int space = array[i];
array[i] = array[t];
array[t] = space;
}
}
}
}
// 选择
void sortb(int array[], int n)
{
for (int i = 0; i < n - 1; i++)
{
int k = i;
// 内循环,查找i后面所有数中最小的一个的位置,放在k中
for (int j = i + 1; j<n; j++)
{
if (array[k] > array[j])
k = j;
}
// 如果k已经发生了变动,说明有更小的值,把它和i交换
if (k != i)
{
int space = array[i];
array[i] = array[k];
array[k] = space;
}
}
}
// 快速
void sortc(int arr[],int l,int r)
{
if (l < r)
{
int i = l, j = r, x = arr[l];
while (i < j)
{
while (i < j && arr[j] >= x) // 从右向左找第一个小于x的数
j--;
if (i < j) // 如果找到更小的
arr[i++] = arr[j];
while (i < j && arr[i] < x) // 从左向右找第一个大于等于x的数
i++;
if (i < j)
arr[j--] = arr[i];
}
arr[i] = x;
sortc(arr, l, i - 1); // 递归调用,分而治之
sortc(arr, i + 1, r);
}
}
main函数:
#include "stdafx.h"
#include "TestSonikk.h"
#include "UTime.h"
int _tmain(int argc, _TCHAR* argv[])
{
TestSonikk ts;
int n = 10000;
std::string file_path = "F:\\test\\data.txt";
int* arr0 = nullptr;
bool bRet = ts.readFileArray(file_path, arr0, n); // 从文件读取数组
if (bRet == false)
{
// 从外部读取失败,转从内部随机生成
arr0 = ts.makeRandomArray(n, 0, n);
printf("内部生成数据ok. (n=%d) \r\n", n);
// 如果没有从外部读取数据,则自动保存数据
ts.writeFileArray(file_path, arr0, n);
printf("保存内部生成的数据到文件ok. (n=%d) \r\n", n);
}
else
{
printf("从外部文件读取数据ok. (n=%d) \r\n", n);
}
int* arr1 = ts.copyArray(arr0, n);
int* arr2 = ts.copyArray(arr0, n);
UTime ut;
{
ut.start();
sorta(arr0, n);
printf("[冒泡] 所用时间: %s 秒\r\n", ut.end_str().c_str());
}
{
ut.star