选择排序法和冒泡排序差不多,但是选择排序法不是比出大小就交换而是编辑出最大值点,当一轮比较完成后将标记的值和最后一个数值做交换,然后继续进行下一轮的交换,在下一轮时末端边界自动减一。
例如:
用maxPos标记区间中首元素位置,然后用后序元素依次与maxPos标记的元素进行比较,如果有元素大于maxPos位置的元素,用maxPos标记该元素的位置,直到区间的末尾。
该趟选择完成后,即找到该区间中最大元素,如果maxPos标记的最大元素不在区间末尾,用maxPos位置元素与区间末尾的元素进行交换。
继续新一趟选择,直到区间中剩余一个元素
下图示意时找最小值,将最小值放置在最前端:
void print(int* arr,int sz)
{
for (int i = 0; i <= sz; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int i, j, pos;
int arr[] = { 2,8,3,9,5,7,1,4,0,6 };
int sz = sizeof(arr) / sizeof(arr[0])-1;
print(&arr,sz);
for (i = 0; i <= sz; i++)
{
pos = 0;
for (j = 1; j <= sz-i; j++)
{
if (arr[j] > arr[pos])
{
pos = j;
}
}
if (pos != sz-i)
{
int temp = arr[pos];
arr[pos] = arr[sz-i];
arr[sz-i] = temp;
}
}
print(&arr, sizeof(arr) / sizeof(arr[0]) - 1);
return 0;
}