排序算法

本文介绍了选择排序、插入排序和归并排序、快速排序四种排序算法。选择排序时间复杂度为O(N^2),插入排序在数组接近有序时效率较高。归并排序采用分治策略,时间复杂度为O(NlogN)。快速排序在处理重复元素时可采用三路快速排序。文章还提及了排序算法在实际问题中的应用,如归并排序在计算逆序对和快速排序寻找第n大元素的应用。
摘要由CSDN通过智能技术生成
  1. 选择排序

在剩余的数组中选择最小的插入到相应位置
时间复杂度:O(N^2)

public static void sort(int[] a,int low,int high){
  for(int i = 0;i<=high;i++){
   int minIndex = i;
   for(int j = i+1;j<=high;j++){
    if(a[j]<a[minIndex])
     minIndex = j;
   }
   swap(a,i,minIndex);
  }
 }

2.插入排序
类似与整理纸牌,将下一个数字与已排序完成的部分作比较,进行插入
时间复杂度:O(N^2)

for(int i = 1;i<=high;i++){
   int e = a[i];
   int j;
   for(j = i;j>0&&a[j-1]>e;j--)
    a[j] = a[j-1];
   a[j] = e;
  }

插入排序比选择排序快,因为插入排序可以提前终止内层循环
在数组本身接近有序时,插入排序的效率很高,甚至高于O(N)的算法。

3.归并算法
把数组分为两部分,每个部分再继续分为两部分,知道每个部分只有一个元素(这部分时间复杂度是O(logN)),然后进行性比较,把每个部分按照顺序合并起来(这部分时间复杂度是O(N)),总的时间复杂度是O(NlogN),另外需要一个辅助数组空间帮助我们合并,因此空间复杂度是O(N)

public static void sort(int[] a,int low,int high){
  if(low>=high)
   return;
  int mid = low+(high-low)/2;
  sort(a,low,mid);
  sort(a,mid+1,high);
  merge(a,low,mid,high);
 }
 public static void merge(int[] a,int low,int mid,int high){
  int[] temp = new int[high-low+1];
  for(int i = low;i<=high;i++)
   temp
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值