代码
// ConsoleApplication1.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <windows.h>
#include <time.h>
using namespace std;
void swap(int* data1, int* data2)
{
int tmp = *data1;
*data1 = *data2;
*data2 = tmp;
}
void Bubble_Sorting(int array[],int length)
{
for (int i = 0; i < length; i++)
{
for (int j = i + 1; j < length; j++)
{
if (array[j] < array[i])
{
swap(&array[j], &array[i]);
}
}
}
}
//用了一个标志位去记录最小数的下标,省去每次交换的时间
void Pick_Up(int array[], int length)
{
for (int i = 0; i < length; i++)
{
int min = i; //先假设每顶层循环的第一个数是最小
for (int j = i + 1; j < length; j++)
{
if (array[j] < array[min]) //如果第一个数后面的数都比较,最后min就是最小数下标
min = j;
}
if (min != i) //如果顶层的第一个数不是最小,就交换
swap(&array[i], &array[min]);
}
}
int main(void)
{
int array[10000];
int length = sizeof(array) / sizeof(int);
for (int i = 0; i < length; i++)
{
srand((unsigned)time(NULL));
array[i] = rand();
}
double start = GetTickCount();
// Bubble_Sorting(array,length);
Pick_Up(array,length);
double end = GetTickCount();
cout << end - start << endl;
return 0;
}
结果:和冒泡法排序比较,因为少了交换的次数,所以时间会少一点,但是时间复杂度一样O(N2)O(N^2)O(N2)
排序10000个数
方法 | 时间 |
---|---|
Bubble_Sorting | 719 |
Pick_Up | 125 |