vlambda博客
学习文章列表

选择排序,系列排序算法第二弹

选择排序,课件代码均在下方的文字介绍中。

Replay Share Like
时长

22:40

0 / 0

Original
选择排序,系列排序算法第二弹
C3程序猿
进度百分之0
进度00:00
时长22:40
时长22:40
全屏

继续观看

选择排序,系列排序算法第二弹


逻辑:遍历数据,选出最大或者最小的元素,依次交换到数组的一侧。

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;

}