/* 插入排序 InsertionSort */
#include <iostream>
#include <iomanip>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <ctime>
using namespace std;
typedef vector<int> VI;
#define N 10
void InsertionSort(int a[], int n);
void InsertionSort(VI& vi);
void Print(int a[], int n);
ostream& operator<<(ostream& out, const VI& vi);
int main()
{
int a[] = {8, 34, 64, 51, 32, 21};
int n = sizeof(a) / sizeof(int);
VI vi(a, a + n);
cout << "排序前:/n";
Print(a, n);
cout << "插入排序过程:/n";
InsertionSort(a, n);
cout << "排序前:/n";
cout << vi;
cout << "插入排序过程:/n";
InsertionSort(vi);
cout << string(20, '*') << endl;
clock_t begin, end;
begin = clock();
int b[N];
for (int i = 0; i < N; ++i)
b[i] = rand() % N;
InsertionSort(b, N);
end = clock();
cout << fixed << setprecision(3) << (double)(end - begin) / CLOCKS_PER_SEC << "s" << endl;
return 0;
}
void InsertionSort(int a[], int n)
{
int i, j, temp;
for (i = 1; i < n; ++i) {
temp = a[i];
for (j = i; j > 0 && a[j - 1] > temp; --j)
a[j] = a[j - 1];
a[j] = temp;
Print(a, n);
}
}
void InsertionSort(VI& vi)
{
size_t i, j;
int temp;
for (i = 1; i < vi.size(); ++i) {
temp = vi[i];
for (j = i; j > 0 && vi[j - 1] > temp; --j)
vi[j] = vi[j - 1];
vi[j] = temp;
cout << vi;
}
}
void Print(int a[], int n)
{
for (int i = 0; i < n; ++i)
cout << a[i] << " ";
cout << endl;
}
ostream& operator<<(ostream& out, const VI& vi)
{
for (size_t i = 0; i < vi.size(); ++i)
out << vi[i] << " ";
out << endl;
return out;
}
插入排序
最新推荐文章于 2023-09-23 17:47:53 发布