选择排序
选择算法的原理在于用数组里的起始数组和后面的进行比较,即在数组中找到最小的一位,然后将这个最小的一位数据和数组的起始位进行交换,下一轮便将之前的起始位排除不考虑,重新定义起始位,即上一个起始位的下一个,然后又找出最小的一位和现在的起始位进行交换,直到起始位到达数组的最后一位,算法结束。
#include<iostream>
#include<string>
using namespace std;
void ChooseSort(int* buf, int length);
int main()
{
int buff[7] = { 5, 2, 1, 4, 9, 6, 0 };
for (int i = 0; i < 7; i++)
cout << buff[i] ;
cout << endl;
ChooseSort(buff, 7);
for (int i = 0; i < 7; i++)
cout << buff[i];
cout << endl;
return 0;
}
void ChooseSort(int* buf, int length)
{
int count = 0, temp = 0;
int begin = 0;
while (begin < length-1)
{
temp = buf[begin]; //记录初始的位置
for (int i = begin+1; i < length; i++)
{
if (temp>buf[i])
{
temp = buf[i];
count = i; //记录最小数值的位置
}
}
if (count != 0) //这里的判断是为了防止count为0的时候也执行了交换,导致错误
{
buf[count] = buf[begin];
buf[begin] = temp;
}
/找到数组中最小的一位并与初始位进行交换
begin++;
count = 0;
}
}
代码说明:temp一开始记录的位数组的起始位,while里的循环是为了找到从起始位的后一位到数组结束的中间的比起始位小的数据,如果存在便交换最小数据和起始位,否则不做任何操作。值得注意的是程序里定义了一个count来记录最小位的位置,否则无法将起始位与最小位进行交换。同时count在不一轮结束后都要清零,这就带来一个问题,如果不会count进行判断,那么便会发生一种情况:如果起始位就是最小的,不用交换,那么count就是0,不加判断的话,起始位便会和数组的第一位进行交换,出现错误(我们知道起始位之前的数据是不能动的)。begin不断的增加,即起始位不断的右移,直到到达数组的倒数第二位,遍历完成。
效果: