//选择排序法:找N-1次,每次找到最小的数并转换位置,以此完成排序
#include <iostream>
#include <ctime>
using namespace std;
const int N = 10;
int arr[N];
void init(int arr[]);//生成数据
void Result(int arr[]);//结果
void ForSort(int a[]);
void WhileSort(int a[]);
void GotoSort(int a[]);
void DoWhileSort(int a[]);
void RecursiveSort(int a[],int i=0);
int main()
{
//准备数据
init(arr);
//排序
//ForSort(arr);
//WhileSort(arr);
//GotoSort(arr);
//DoWhileSort(arr);
RecursiveSort(arr);
//结果
cout << endl;
Result(arr);
getchar();
}
void RecursiveSort(int a[],int i)
{
if (i < N - 1)
{
int k = i;
for (int j = i + 1; j < N; j++)
{
if (a[k]>a[j])
k = j;
}
if (i != k)
{
int temp = a[i];
a[i] = a[k];
a[k] = temp;
}
RecursiveSort(a, ++i);
}
}
void DoWhileSort(int a[])
{
int i(0);
do
{
int k = i;
int j = i+1;
do
{
if (a[k] > a[j])
k = j;
j++;
} while (j<N);
if (i != k)
{
int t = a[i];
a[i] = a[k];
a[k] = t;
}
i++;
} while (i<N-1);
}
void GotoSort(int a[])
{
int i(0);
a:
if (i < N - 1)//找这么多遍
{
int k = i;
int j = i + 1;
b:
if (j < N)
{
if (a[k]>a[j])
k = j;//找到小的
++j;
goto b;
}
if (i != k)
{
int temp = a[i];
a[i] = a[k];
a[k] = temp;
}
i++;
goto a;
}
}
void WhileSort(int a[])
{
int i(0), j(0);
while (i<N-1)
{
int k=i;
j = i+1;
while (j<N)
{
if (a[k]>a[j])
k = j;//找到最小
j++;
}
if (i != k)
{
int temp = a[i];
a[i] = a[k];
a[k] = temp;
}
i++;
}
}
void ForSort(int a[])
{
for (int i = 0; i < N - 1; i++)//找这么多遍
{
int k = i;
for (int j = i + 1; j < N; j++)//找出一个最小的
{
if (a[k]>a[j])
k = j;//找到了
}
if (i != k)//位置不对,调换
{
int temp;
temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}
void init(int arr[])
{
srand(unsigned int(time(NULL)));
for (int i = 0; i < N; i++)
{
arr[i] = 100 + rand() % 100;
printf("arr[%d]=%d\n", i, arr[i]);
}
}
void Result(int arr[])
{
for (int i = 0; i < N; i++)
{
printf("arr[%d]=%d\n", i, arr[i]);
}
}
选择排序法
最新推荐文章于 2024-01-16 05:00:00 发布