直接插入排序和简单选择排序

本文详细解析了简单选择排序和直接插入排序两种经典排序算法的原理与实现。介绍了简单选择排序通过每轮选择最小元素进行排序的过程,以及直接插入排序如何通过比较和移动元素来维护已排序部分的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单选择排序的思想:
简单选择排序的基本思想是每一趟在 n-i+1个记录中选取关键字最小的记录作为有序序列的第i个记录

直接插入排序思想:
基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录加1的有序表。

两者都是第二for循环都是不断查找,一个是不断往后找,一个在当前i,不断往前找。
简单选择排序,就是在当前选择i的时候,从后序的n-i+1个记录中查找最小的那个数,插入当前位置。

 // 简单选择排序: 每一趟在n-i+1个记录中选择关键字最小的记录 作为有序序列的第i个记录。
        public void SelectSort(int[] nums)
        {
            int i,j,min;

            for(i = 0;i<nums.length;i++)
            {
                min = i;   //每一次插入
                for(j = i+1;j<nums.length;j++) //都从后续的序列中找到最小的min
                {
                    if(nums[min]>nums[j])
                        min = j;
                }
                if(i!=min){                 // i!=min  即找到,否则 当前最小
                    swap(nums,i,min);
                }
            }

            prints(nums);
        }

直接插入查找,就是当前i位置时,不断往前找一个合适的(已经有序的位置插入).
int temp = nums[i],
for(j = i-1;j>=0;j–)
if(nums[j]>temp)
nums[j+1] = nums[j];//移动元素
else
break; //找到当前j 是小于 i位置的一个元素,所以插入nums[j+1] = temp;

// 直接插入排序
        public void InsertSort(int[] s){

            int i,j;
            for(i = 1;i<s.length;i++)
            {
                int temp = s[i];  // 存下当前的数
                for(j = i-1;j>=0;j--)
                {
                    if(s[j]>temp)
                    {
                        s[j+1] = s[j];// 大于temp的数后移
                    }else{
                        break;
                    }
                }
                // 插入
                s[j+1] = temp;
            }
            prints(s);
        }

不同:很容易弄混.把直接插入排序,当成简单选择排序,
因名知意,选择就是从后选择,选择最小的元素,插入当前位置。
而插入排序,则是找个合适的位置,插入,具体怎么插入,怎么移动。从这方面思考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值