数组排序算法当中的交换法排序,其原理和思路是什么?

img

img

img

这里反复看了好几次没明白原理是什么?这种交换法是怎么实现从小到大排序的?(这里所说的是数学逻辑是什么,而不是书中所说的实现步骤)
望有人能回答一下这个问题

就是先拿第一个和后面的比较,发现比后面的大,将后面的放到第一个,然后一直比,直到比完所有的,这个时候第一个数就是最小的,依次类推,拿第二个和后面的数比较。
其实这里的过程就是找到最小的数,然后把这个最小的放到前面来,然后找第二小的。。。。。。。

1、一堆数字,第1个数字和第2个数字比,如果第1个数字大于第2个数字,他们就交换位置,然后第一个数字和第三个数字比,依次类推

交换排序(也称交换法排序)是一类基于比较的排序算法,其基本思想是在未排序的元素中找到最小或最大的元素,然后将其与数组的第一个元素交换位置。接着,在剩余的未排序的元素中找到最小或最大的元素,然后将其与数组的第二个元素交换位置。如此循环,直到将整个数组排序。
具体来说,交换排序的过程如下:
1.从第一个元素开始,假设它是未排序中的最小元素;
2.遍历数组中剩下的元素,找到最小的元素,并记录它的位置;
3.将最小元素与第一个元素交换位置;
4.从第二个元素开始,重复步骤 2 和 3,直到将整个数组排序。
交换排序算法的时间复杂度为O(n^2),其中n是待排序数组的大小。它是一种简单直观的排序算法,但由于其时间复杂度较高,在实际应用中往往被更高效的排序算法所取代。

我真的服气,楼上现在ChatGPT回答都不带标注的嘛?

过程:首先,用第一个数依次与其后的所有数进行比较,
如果存在比值大(小)的数,则交换这两个数,
然后继续向后比较其他数直到最后一个数,
然后在使用第二个数与其后面的数进行比较,
如果存在比其值大(小)的数,则交换这两个数。
继续向后比较其他数直至最后一个数比较完成,
直接上代码,你可以研究一下就明白了:

/*  C程序数组算法 — 交换法排序
*   此例子按照 大 -> 小 排序
*   原理:前一个和后一个相比较,然后进行大小对调 一直如此 直到最后一个   
*   说明:交换法和冒泡法一样,当待排序的列有序时,效果最好!
*/
#include<stdio.h>
int main()
{
    int a[10] = {3,7,5,8,4,2,1,6,9,10}; // 随便打的....
    int temp,i,j;
    for(i = 0;i<9;i++) //外层循环比较N-1次
    {
    for(j = i+1;j<10;j++)   //内层循环从i开始比较 i为未排的第一个 i+1 则是未排的第二个
    {
        if(a[j] < a[i])     //交换值
        {
        temp = a[i];
        a[i]  = a[j];
        a[j] = temp;
        }
    }
    }
 
    for(i = 0;i<10;i++) //排好就打印.....
    {
    
    printf("%d\n",a[i]);
    }
 
 
 
return 0;
}

1,你可以想象下,上体育课拍合照时,老师要求从高到低按升高排,当你发现你右边有个比你矮的,你就和他交换位置,交换完下一个还是比你矮,就再交换,这时倒数第一有个全班最高的,他就一直向右移动,因为每次比较他都更高,知道大高个从最后一位“冒泡”到第一位
2,建议百度或CSDN搜“冒泡排序”,看看别人的动态图解,你就了解了

我曾经写过一篇博客,你可以参考一下
http://t.csdn.cn/t5yKZ