内部排序算法

内部排序算法

一、直接插入排序

1、算法思想:
每次将一个待排序的记录按其关键字大小插入到前面已经排好序的子序列中,知道全部记录插入完成。、
如:
	关键字序列:49、38、65、97、76、12、27、49,将其排成升序的序列。
	排序前:49、38、65、97、76、12、27、49
	第一趟插入排序之前:选中38
	第一趟排序之后:38、49、65、97、76、12、27、49
	第二趟排序之前:选中:65
	第二趟排序之后:38、49、65、97、76、12、27、49
	第三趟排序之前:选中97
	第三趟排序之后:38、49、65、97、76、12、27、49
	第四趟排序之前:选中76
	第四趟排序之后:38、49、65、76、97、12、27、49
	第五趟排序之前:选中12
	第五趟排序之后:12、38、49、65、76、97、27、49
	其他的一次类推
2、代码:
void InsertSort(int A[],int n){
   
    int i,j,temp;
    for(i = 1; i < n; i++){
   
        if(A[i] < A[i-1]){
   
            temp = A[i];
            for(j = i-1; j >=0 && A[j] > temp; j--){
   
                //从被选定的元素的前一个元素开始向前寻找,如果前面的元素均比其大,则往后移动
                A[j+1] = A[j];  //不要写成A[j++] = A[j],会出现死循环
            }
            A[++j] = temp;
        }
    }
}
3、复杂度
最好的时间复杂度为:O(n),当元素有序时,不需要移动元素
最坏时间复杂度为:O(n^2),当元素逆序时
平均时间复杂度为:O(n^2)

空间复杂度为:O(1)
4、算法稳定性
稳定

二、交换排序

冒泡排序

1、算法思想:
从后往前(后者从前往后)两两比较相邻元素的值,若为逆序,则交换它们,直到比较结束。称这样的过程为“一趟”冒泡排序。
一组序列:49、68、65、97、76、13、27、49
第一次冒泡:13冒到最前面:13、49、68、65、97、76、27、49
第二次冒泡:27冒到最前面:13、27、49、68、65、97、76、49
第三次冒泡:49冒到前面:13、27、49、49、68、65、97、76
其
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值