一、升序动画演示

二、升序代码实现(双指针)
先了解下什么是双指针
void Swap(int *num, int *num2)
{
num = num ^ num2;
num2 = num ^ num2;
num = num ^ num2;
}
void SelectSort(int* nums, int numsSize)
{
int begin = 0;
int end = numsSize - 1;
int max_index, min_index;
while (begin < end)
{
max_index = end;
min_index = begin;
for (int i = begin; i <= end; i++)
{
/* 得到最小值的下标 */
if (nums[i] < nums[min_index])
min_index = i;
/* 得到最大值的下标 */
if (nums[i] > nums[max_index])
max_index = i;
}
/* 将最小值放前面 */
Swap(&nums[begin], &nums[min_index]);
/*
* 对 max_index 进行修正
* {9, 3, 5, 2, 7, 8, 6, -1, 9, 4, 0}
*/
if (begin == max_index)
max_index = min_index;
/* 将最大值放后面 */
Swap(&nums[end], &nums[max_index]);
/* 缩小区间 */
begin++;
end--;
}
}
三、复杂度
时间复杂度:O(N^2)
5989

被折叠的 条评论
为什么被折叠?



