c 选择排序
递归:
#include <stdio.h>
void printArray(int *array, int num);
void selectionSort(int *array,int order,int num);
void selectionSort(int *array,int order,int num)
{
// num -> 元素个数
// order -> 标准左值的下标 --> (num - order) -> 标准右值的下标
// 递归结束条件
if (order == (num / 2))
{
return;
}
int min = order;// 最小值的下标
int max = (num - 1) - order;// 最大值的下标
/* 寻找最值 */
for (int i = (order + 1); i < (num - order); i++)
{
min = (array[min] < array[i] ? min : i);
max = (array[max] > array[i] ? max : i);
}
/* 标准左值与最小值互换 */
if (array[min] < array[order])
// 如果最小值比标准左值小,无操作
{
int temp = array[min];
array[min] = array[order];
array[order] = temp;
}
/* 标准右值与最大值互换 */
if (array[max] > array[(num - 1) - order])
// 如果最大值比标准右值大,无操作
{
int temp = array[max];
array[max] = array[(num - 1) - order];
array[(num - 1) - order] = temp;
}
selectionSort(array,++order,num);
}
void printArray(int *array, int num)
{
for (int i = 0; i < num; i++)
{
printf("%2d ",*(array + i));
}
putchar('\n');
return;
}
int main(void)
{
int array[] = {9,10,3,4,2,5,1,7,8,6};
int num = sizeof(array) / sizeof(int);
printArray(array,num);
selectionSort(array,0,num);
printArray(array,num);
return 0;
}