您的位置:首页 > 其它

选择排序

2016-05-19 23:11 141 查看
下面我介绍两种选择排序的方法: 一.选最小的或最大的(我以最小的为列) 这种方法的思路为: 1.在数组中选出最小的数值,放在a[0]位置。 2.选出次小的放在a[1]位置。 3.就这样一直选,直到排好数列。实现代码:
#include<assert.h>
void SelectSort(int *arr, int size )
{
assert(arr );
int min;
for (int i = 0; i < size; i++)
{
min = i;
//选出最小的数,把最小数的下标给成min
for (int j = i + 1; j < size ; j++)
{
if (arr [j]< arr[min])
{
min = j;
}
}
//把最小的数放在i位置
int tmp = arr [i];
arr[i] = arr [min];
arr[min] = tmp;
}
}
void Print(int *arr, int size )
{
for (int i = 0; i < size; i++)
{
cout << arr[i] << " " ;
}
cout << endl;
}
test.cpp
#include<iostream>
using namespace std;
#include "Sort.h"

void Test()
{
int arr[] = { 3, 9, 7, 6, 1, 2, 4, 8, 0, 5 };
SelectSort(arr, sizeof(arr) / sizeof(arr[0]));
Print(arr, sizeof(arr) / sizeof(arr[0]));
}
int main()
{
Test();
system("pause");
return 0;
}
二、选最大和最小的
思路:
1.选出最大最小放在两边。
2.一直这样选,直到选完为止。
void SelectSort_OP(int *arr, int size )
{
assert(arr );
int left = 0;
int right = size - 1;
while (left < right)
{
int min = left;
int max = right;
//选出最大和最小的放在两边,然后缩小区间,循环
for (int i = min; i < right; i++)
{
if (arr [i] < arr[min])
{
swap( arr[i], arr [min]);
}
else if (arr[i]> arr[max])
{
swap( arr[i], arr [max]);
}
}
++left;
--right;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: