这个排序也很简单,时间复杂度是n*n.
原理是:每次找未排序元素中最小(大)的元素,然后插在已排序的序列的最后。
废话不多说,看c#代码:
class SelectSorter
{
public bool Sort(ref int[] numbers, int arrSize)
{
doInsertSort(ref numbers, arrSize);
return true;
}
private void doInsertSort(ref int[] numbers, int arrSize)
{
for (int pos = 0; pos < arrSize; pos++)
{
int smallestIdx = getNextSmallest(numbers,pos,arrSize);
Swap(ref numbers,smallestIdx,pos);
}
}
private int getNextSmallest(int[] numbers,int start,int size)
{
int temp = Int32.MaxValue;
int rslt_idx = -1;
for (int i = start; i < size; i++)
{
if (temp > numbers[i])
{
temp = numbers[i];
rslt_idx = i;
}
}
return rslt_idx;
}
private void Swap(ref int[] numbers, int idx1, int idx2)
{
int temp = numbers[idx1];
numbers[idx1] = numbers[idx2];
numbers[idx2] = temp;
}
}