算法篇(一)直接插入排序与快速排序

【一】直接插入排序是减治法的一种实例,较为简单,时间复杂度O(n2)

下面用递归方法:

1.将带插入数以前的数列看做有序的。

2.由待插入数的一位开始从后往前与带插入比较直到待插数小于后数大于前数时插入。即:大于插入数的均往后移一位,插入数放在第一位后移数的原位置。

3.递归调用第2步。直到插入数位置大于数据总长时终止。

源代码:

void insertionsort(int *pArr,int index, int len)//直接插入排序算法
{
int key;
int i=0;
key = pArr[index];
if(index >= len){ return;}

for(i=index-1; i>=0 && key<pArr[i]; i--) //插入目标数,下标index
{
pArr[i+1] = pArr[i];
}
pArr[i+1] = key;
insertionsort(pArr,index+1,len);

}

【二】快速排序是分治法的一种实例,是最快的排序方法,时间复杂度为O(nlog2n)

1.快速排序先选择一个中轴,通常是第一个数。

2.设置low和high,分为三部分,分别是小于中轴的数,中轴和大于中轴的数。

3.再将左右两边递归调用第三步,循环递归,当low=high时终止。

void QuickSort(int *pArr,int low, int high)//快速排序
{
int i = low;
int j = high;
int key = pArr[i];

if(low < high)
{
while(i < j)
{
while(key <= pArr[j] && i<j)
{
j--;
}
pArr[i] = pArr[j];
while(key >= pArr[i] && i<j)
{
i++;
}
pArr[j] = pArr[i];
}
pArr[i] = key;
QuickSort(pArr,low,i-1);
QuickSort(pArr,j+1,high);
}
else{
return;
}

}

对2000数排序,比较两种排序,插入排序用时0.005s,快速排序用时0.001s。可见快速排序还是有优势。

小编水平有限,如有错误请指出。

转载于:https://www.cnblogs.com/lisuyuan/p/3404381.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值