直接插入排序算法
来源:互联网 发布:今日特惠淘宝优站 编辑:程序博客网 时间:2024/05/16 09:29
一、算法描述
假定n是数组的长度,首先假设第一个元素被放置在正确的位置上,这样仅需从1-n-1范围内对剩余元素进行排序。对于每次遍历,从0-i-1范围内的元素已经被排好序,每次遍历的任务是:通过扫描前面已排序的子列表,将位置i处的元素定位到从0到i的子列表之内的正确的位置上。将arr[i]复制为一个名为target的临时元素。向下扫描列表,比较这个目标值target与arr[i-1]、arr[i-2]的大小,依次类推。这个比较过程在小于或等于目标值的第一个元素(arr[j])处停止,或者在列表开始处停止(j=0)。在arr[i]小于前面任何已排序元素时,后一个条件(j=0)为真,因此,这个元素会占用新排序子列表的第一个位置。在扫描期间,大于目标值target的每个元素都会向右滑动一个位置(arr[j]=arr[j-1])。一旦确定了正确位置j,目标值target(即原始的arr[i])就会被复制到这个位置。与选择排序不同的是,插入排序将数据向右滑动,并且不会执行交换。
二、示例代码
public static void InsertSort(int[] arr)
{ int i, j;
int n = arr.Length;
int target; //假定第一个元素被放到了正确的位置上 //这样,仅需遍历1 - n-1
for (i = 1; i < n; i++)
{ j = i;
target = arr[i];
while (j > 0 && target < arr[j - 1])
{ arr[j] = arr[j - 1];
j--;
}
arr[j] = target; }
}
三、效率分析稳定
空间复杂度O(1) 时间复杂度O(n2) 最差情况:反序,需要移动n*(n-1)/2个元素 最好情况:正序,不需要移动元素数组在已排序或者是“近似排序”时,插入排序效率的最好情况运行时间为O(n);插入排序最坏情况运行时间和平均情况运行时间都为O(n2)。通常,插入排序呈现出二次排序算法中的最佳性能。对于具有较少元素(如n<=15)的列表来说,二次算法十分有效。在列表已被排序时,插入排序是线性算法O(n)。在列表“近似排序”时,插入排序仍然是线性算法。在列表的许多元素已位于正确的位置上时,就会出现“近似排序”的条件。通过使用O(nlog2n)效率的算法(如快速排序)对数组进行部分排序,然后再进行选择排序,某些高级的排序算法就是这样实现的。
- 直接插入排序算法
- 直接插入算法排序
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 【黑马程序员】【C语言】注释
- [257]Binary Tree Paths
- 只有程序员看的懂面试圣经
- 【黑马程序员】【C语言】变量
- 视频切割的精确定位问题
- 直接插入排序算法
- 股票的强弱分析 RSI
- Android音乐编程:管理音频焦点
- 【黑马程序员】【C语言】选择结构-if语句
- C语言第一天
- iOS后台模式开发指南
- Windows下载Android源码
- 【黑马程序员】【C语言】选择结构-switch语句
- hdu3672 Caves 树形dp