简单的排序算法:插入排序法

算法原理:依次对比每个位置上的元素与之前元素的大小,并进行交换,直道之前元素不大于目标元素

算法复杂度:O(n^2)

c++实现整形数组排序

 1 void insertionSort(int arr[],int n)
 2 {
 3     for(int i=1;i<n;i++)
 4         for(int j=i;j>0;j--)
 5         {
 6             if(arr[j-1]>arr[j])
 7                 swap(arr[j],arr[j-1]);
 8             else
 9                 break;
10         }
11     return;
12 }

每次swap经过了三次赋值运算,可通过改写语句优化算法,建立一个临时变量存储当前元素数据,用一次赋值运算代替swap函数。

 1 void insertionSort(int arr[],int n)
 2 {
 3     for(int i=1;i<n;i++)
 4     {
 5         int e=arr[i];
 6         int j;
 7         for(j=i;j>0&&arr[j-1]>e;j--)
 8             arr[j]=arr[j-1];
 9         arr[j]=e;
10     }
11     return;
12 }

将第二层循环内的判断语句加入到了for循环判断中,省去了break,需注意的是,与j-1元素对比的是存储当前元素的临时变量e。

转化为范型

 1 template <typename T>
 2 void insertionSort(T arr[],int n)
 3 {
 4     for(int i=1;i<n;i++)
 5     {
 6         T e;
 7         int j;
 8         for(j=i;j>0&&arr[j-1]>e;j--)
 9             arr[j]=arr[j-1];
10         arr[j]=e;
11     }
12     return;
13 }

算法特点是经过排序的部分顺序确定,而第一个元素自然有序,所以第一层循环从i=1开始,第二层循环内,判断之前元素不大于当前元素时,说明已经找到当前元素位置,可用break跳出本次循环。

因为存在跳出循环的情况,所以插入排序更适合基本有序的数组排序。

转载于:https://www.cnblogs.com/Bird-of-Paradise/p/6384938.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值