首页 > 其他分享 >排序

排序

时间:2023-02-27 00:33:19浏览次数:27  
标签:arr end int begin while key 排序

1.插入排序:

源码一:

void InsertSort(vector<int>&arr)
{
int n = arr.size();
for (int i = 0; i < n - 1; ++i)
{
//记录有序序列最后一个元素的下标
int end = i;
//待插入的元素
int tem = arr[end + 1];
//单趟排
while (end >= 0)
{
//比插入的数大就向后移
if (tem < arr[end])
{
arr[end + 1] = arr[end];
end--;
}
//比插入的数小,跳出循环
else
{
break;
}
}
//tem放到比插入的数小的数的后面
arr[end + 1] = tem;
//代码执行到此位置有两种情况:
//1.待插入元素找到应插入位置(break跳出循环到此)
//2.待插入元素比当前有序序列中的所有元素都小(while循环结束后到此)
}
}

源码二:

void charu(vector<int>&a)
{
if (a.size() <= 1)
return ;
for (int i = 1;i<a.size(); i++)
{
int k = i - 1;
while (k>= 0&&a[i]<a[k])
{
k--;
}
a.insert(a.begin()+(k+1),a[i]);
a.erase(a.begin() + i+1);
}
}

2.快排

void quicksort(vector<int>&a,int begin,int end)
{
if (begin >= end)
return;
int l = begin;
int r = end;
int key=begin;
while (l!=r)
{
while (r>l&&a[r] >= a[key])
{
r--;
}
while (r>l&&a[l] <=a[key])
{
l++;
}
swap(a[l], a[r]);
}
swap(a[key], a[l]);
key = l;
quicksort(a, begin, key- 1);
quicksort(a,key+1,end);
}

插入排序优点:原地排序,时间复杂度最好为O(n),最坏为O(n^2),传统方法中,最好情况的就是基本有序,此时为O(n),最坏情况为基本逆序,此时时间复杂度为O(n^2)

快速排序:原地排序,时间复杂度为O(nlogn),若数组基本有序或者基本逆序,此时并不适合快排,当数组基本无序时适合快排。

标签:arr,end,int,begin,while,key,排序
From: https://www.cnblogs.com/huangcong1233/p/17158317.html

相关文章

  • 【算法】排序算法之归并排序
    原文网址:https://zhuanlan.zhihu.com/p/124356219前几回,在前面已经对冒泡排序、直接插入排序、希尔排序、选择排序、快速排序做了说明分析。这回,将对归并排序进行相关说明......
  • python的排序问题
    python的排序方法有两个1nums.sort()#原数组上排序,没有返回值,nums变为有序2#或者3nums=sorted(nums)#原数组不变,会返回一个排好序的新数组 那么如何......
  • 03:成绩排序
     描述给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前。输入第一行为n(0<n<20),表示班里的学生数目;接下来的n行,......
  • 回调函数和如何使用qsort函数以及最后如何运用冒泡排序完成一个各类型数据都适用的排
    首先回调函数就是通过一个函数指针调用的函数。简言之就是如果你把函数的指针作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这就是回调函数。回调......
  • java的排序问题
    普通排序对于基础数据类型的排序,基本只是调用一下方法如java的 1Arrays.sort(nums);那么如何自定义排序规则呢?自定义排序规则:假设现在有这么个问题,有n个学生, 每......
  • 数据结构(借鉴408)-排序
    数据结构排序分冶稳定性时间复杂度空间复杂度1.插入类排序直接插入排序折半插入排序希尔排序分组(间距d--),直接插入排序2.交换类排序起泡排序快速排序......
  • 数据结构与算法【基础版】:4.9 常用排序算法之堆排序(属于选择排序)【简单选择排序在3.6
    堆排序大顶堆:父节点始终大于任意子节点小顶堆:任意一个子节点都比父节点大思路:先找到最后一个非叶子节点,即最后一个节点的父节点和他的左右节点比较,左右节点大的情况和父节点......
  • 数据结构与算法【基础版】:3.5排序算法之希尔排序(属于插入排序)
    3.5排序算法之希尔排序(属于插入排序)思路:第一轮1.先用数组长度/2等于一个值,该值就是区间的步长(做为比较)9/2=42.让每个部分都做一个插入排序第一部分的比较:后续部分一样......
  • python--排序总结
    1.快速排序a.原理快速排序的基本思想是在待排序的n个元素中任取一个元素(通常取第一个元素)作为基准,把该元素放人最终位置后,整个数据序列被基准分割成两个子序列,所有小于基......
  • 排序Comparable 和 Comparator的区别
    [1]区别[1.1]源码上的区别  ​​comparable​​​接口实际上是出自​​java.lang​​​包,它有一个​​compareTo(Objectobj)​​方法用来排序;  ​​comparator​​......