选择排序,系列排序算法第二弹
选择排序,课件代码均在下方的文字介绍中。
22:40
0 / 0
继续观看
选择排序,系列排序算法第二弹
逻辑:遍历数据,选出最大或者最小的元素,依次交换到数组的一侧。
1、放右侧:选小的放右侧,则是从大到小排序。
选大的放右侧,则是从小到大排序。
2、放左侧:选小的放左侧,则是从小到大排序。
选大的放左侧,则是从大到小排序。
详细过程:
第一次遍历选出最小的与倒数第一个元素交换。
第二次遍历选出第二小的与倒数第二个元素交换。
第三次遍历选出第三小的与倒数第三个元素交换。
第四次遍历选出第四小的与倒数第四个元素交换。
第n次遍历选出第n小的与倒数第n个元素交换。
图片过程:视频中有讲解
代码逻辑:
1、选最小:记录最小下标,记录最小数据。
2、与指定一侧的元素交换:
第1次与倒数第1个交换
第2次与倒数第2个交换
第3次与倒数第3个交换
第4次与倒数第4个交换
3、指定选择次数:
100个数据选99次,最后一个数据自然成序。每次遍历数据选出一个最大或者最小的数据放到指定的位置上,有10个数据就选9次即可,因为最后一个数据一定是剩下的最小的或者最大的,跟冒泡刨铣一样。外层循环次数比数据数量少1。
源代码如下:
#include <stdio.h>
int main(void)
{
int arr[7] = { 6,1,1,2,8,3,7 };
//int iRig = 6;
for (int i = 6; i >= 1; i--)
{
//选择最小值
int iMin = arr[0]; //记录最小值
int iIndex = 0; //记录最小下标
for (int j = 1; j <= i; j++)
{
if (iMin > arr[j])
{
iMin = arr[j];
iIndex = j;
}
}
//交换
int temp = arr[iIndex];
arr[iIndex] = arr[i];
arr[i] = temp;
//iRig--;
}
for (int i = 0; i < 7; i++)
{
printf("%d ", arr[i]);
}
return 0;
}