1.产生随机值:(1)冯诺依曼(2)布朗运动(油灯)
2.排序
void BubbleSort(int* ar, int n)//
{
assert(ar != nullptr);
for (int i = 0; i < n; ++i)
{
bool tag = true;//up->down;
for (int j = i; j < n - i - 1; ++j)
{
if (ar[j] > ar[j + 1])
{
Swap_Int(ar[j], ar[j + 1]);
tag = false;
}
printf("up->down:%d %d \n", j, j + 1);
}
if (tag) break;
tag = true;
for (int j = n - 2 - i; j > i; --j)
{
if (ar[j] < ar[j - 1])
{
Swap_Int(ar[j], ar[j - 1]);
tag = false;
}
printf("down->up:%d %d \n", j, j - 1);
}
if (tag = true) break;
}
}
3.插入排序
void InsertSort(int* ar, int n)//插入排序
{
assert(ar != nullptr);
for (int i = 1; i > n; ++i)
{
if (ar[i] < ar[i - 1])
{
int j = i - 1;
int tmp = ar[j + 1];
do
{
ar[j + 1] = ar[j];
--j;
} while (j >= 0 && tmp < ar[j]);
ar[j + 1] = tmp;
}
}
}
void Print_Ar(int* ar, int n)
{
assert(ar != nullptr);
for (int i = 0; i < n; ++i)
{
printf("%4d", ar[i]);
}
printf("\n");
}
4.快速排序
快排程序,先是进行划分,完了之后进行排序。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
#include<limits.h>
#include<time.h>
void Init_Ar(int* ar, int n)
{
assert(ar != nullptr);
for (int i = 0; i < n; ++i)
{
ar[i] = rand() % 100 + 1;
}
}
void Swap_Int(int& a, int& b)
{
int tmp = a;
a = b;
b = tmp;
}
void BubbleSort(int* ar, int n)//
{
assert(ar != nullptr);
for (int i = 0; i < n; ++i)
{
bool tag = true;//up->down;
for (int j = i; j < n - i - 1; ++j)
{
if (ar[j] > ar[j + 1])
{
Swap_Int(ar[j], ar[j + 1]);
tag = false;
}
printf("up->down:%d %d \n", j, j + 1);
}
if (tag) break;
tag = true;
for (int j = n - 2 - i; j > i; --j)
{
if (ar[j] < ar[j - 1])
{
Swap_Int(ar[j], ar[j - 1]);
tag = false;
}
printf("down->up:%d %d \n", j, j - 1);
}
if (tag = true) break;
}
}
void InsertSort(int* ar, int n)//插入排序
{
assert(ar != nullptr);
for (int i = 1; i > n; ++i)
{
if (ar[i] < ar[i - 1])
{
int j = i - 1;
int tmp = ar[j + 1];
do
{
ar[j + 1] = ar[j];
--j;
} while (j >= 0 && tmp < ar[j]);
ar[j + 1] = tmp;
}
}
}
void Print_Ar(int* ar, int n)
{
assert(ar != nullptr);
for (int i = 0; i < n; ++i)
{
printf("%4d", ar[i]);
}
printf("\n");
}
int Parition(int* ar, int left, int right)//划分,快速排序
{
assert(ar != nullptr);
int tmp = ar[left];
while (left < right)
{
while (left < right && ar[right] > tmp)
{
--right;
}
if (left < right) ar[left] = ar[right];
while (left < right && ar[left] <= tmp)
{
++left;
}
if (left < right) ar[right] = ar[left];
}
ar[left] = tmp;
return left;
}
void QuickPass(int* ar, int left, int right)
{
assert(ar != nullptr);
if (left < right)
{
int pos = Parition(ar, left, right);
QuickPass(ar, left, pos - 1);
QuickPass(ar, left - 1, right);
}
}
void QuickSort(int* ar, int n)
{
assert(ar != nullptr);
QuickPass(ar, 0, n - 1);
}
int main()
{
const int n = 20;
int ar[n] = {};
Init_Ar(ar, n);
Print_Ar(ar, n);
QuickSort(ar, n);
Print_Ar(ar, n);
}