首页 > 其他分享 >手写排序

手写排序

时间:2024-07-01 21:42:41浏览次数:1  
标签:arr right int void vector 手写 排序 left

''' C++

std::vector arr;

// 插入排序
// 时间复杂度 n^2
void insertSort(vector& arr)
{
int len =arr.size();
for(int i=1;i<len;i++)
{
int v =arr[i],j;
for(j=i-1;v<arr[j]&&j>=0;j--)
{
arr[j+1] = arr[j];
}
arr[j+1] = v;
}
}
// 选择排序
void chooseSort(vector& arr)
{
int len = arr.size();
// 每次选择len-1次
for(int i=0;i<len-1;i++)
{
int k = -1,v = arr[i];
for(int j=i;j<len;j++)
{
if(v>arr[j]) // 这里写=排序就是不稳定的
{
v = arr[j];
k = j;
}
}
if(k!=-1 && k!=i)
swap(arr[k],arr[i]);
}
}
// 冒泡排序
void popSort(vector& arr)
{
int len = arr.size();
for(int i=0;i<len-1;i++)
{
for(int j=i+1;j>0;j--)
{
if(arr.at(j)<arr.at(j-1))
{
swap(arr[j],arr[j-1]);
}
}
}
}
// 快速排序
void quickSort(vector& arr,int L,int R)
{
if(L>=R)return;
int l = L-1,r = R+1;
int v = arr[(L+R)/2];
while(l<r)
{
do l++; while(arr[l]<v);
do r--; while(arr[r]>v);
if(l<r)swap(arr[l],arr[r]);
}
quickSort(arr,L,r); // 0,0
quickSort(arr,r+1,R); // 1,1
}
// hash排序
void hashSort(std::vector& arr) {
std::map<int, int> count;
for (int i : arr)
count[i]++;

arr.clear();
for (const auto& kv : count)
    for (int i = 0; i < kv.second; i++)
        arr.push_back(kv.first);

}
// 归并排序

void merge(std::vector& vec, int left, int mid, int right) {
std::vector temp(right - left + 1);
int i = left, j = mid + 1, k = 0;

while(i <= mid && j <= right)
    temp[k++] = vec[i] <= vec[j] ? vec[i++] : vec[j++];

while(i <= mid)
    temp[k++] = vec[i++];

while(j <= right)
    temp[k++] = vec[j++];

for(k = 0, i = left; i <= right; ++i, ++k)
    vec[i] = temp[k];

}

void mergeSort(std::vector& vec, int left, int right) {
if(left < right) {
int mid = left + (right - left) / 2;
mergeSort(vec, left, mid);
mergeSort(vec, mid + 1, right);
merge(vec, left, mid, right);
}
}
'''

标签:arr,right,int,void,vector,手写,排序,left
From: https://www.cnblogs.com/ghghhh/p/18278909

相关文章

  • 随机生成50个0-100之间的数字,生成对应个数的随机字母,再按数字大小从小到大排序最后写
    importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;importjava.util.Random;importjava.io.FileNotFoundException;importjava.io.PrintStream;publicclassRandomNum{publicstaticvoidmain(String[]args)throwsFileNotF......
  • JavaScript 编程语言【 数据类型】过滤|排序|映射|迭代
    文章目录将border-left-width转换成borderLeftWidth过滤范围原位(inplace)过滤范围降序排列复制和排序数组创建一个可扩展的calculator映射到names映射到对象按年龄对用户排序随机排列数组获取平均年龄数组去重从数组创建键(值)对象Iterableobject(可迭代对象)Symbol.......
  • 【算法探险】在排序数组中查找元素的第一个和最后一个位置
    【算法探险】在排序数组中查找元素的第一个和最后一个位置一、引言:算法界的寻宝图二、技术概述:双剑合璧,左右逢源定义与核心特性优势代码示例:初露锋芒三、技术细节:抽丝剥茧,揭秘算法奥秘原理解析难点剖析四、实战应用:数字海洋,定位精准应用场景案例展示五、优化与改进:精......
  • paddleocr识别表格文字内容,对表格内容进行从左上到右下排序
    背景:使用paddleocr识别表格图片文字内容,但是由于图片拍摄或扫描角度问题,不一定是水平平衡的,可能存在一定的倾斜角度。所以如果是仅按坐标从左上到右下进行排序的话,可能本来同一行的文字,被切分成了上下行。因此需要使用阈值来进行近似判断。下面就是一个可用例子。defsort_to......
  • 【408考点之数据结构】排序的基本概念
    排序的基本概念排序是计算机科学中的一个基本操作,目的是将一组无序的数据元素按照特定的顺序排列起来。排序在数据管理、检索和分析中有着广泛的应用,能够提高数据处理的效率和准确性。1.排序的定义排序(Sorting)是指将一组记录按某个关键字或多个关键字的大小关系进行排列......
  • 蓝桥杯python数组排序
    题目:资源限制内存限制:512.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s问题描述给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200输入格式第一行为一个整数n。第二行包含n个整数,为待排序的数,每个整数的绝对值小于1......
  • 程序A将五个学生的信息(姓名、性别、分数)存入文件Stu_data中 程序B从文件中读取并排序
     首先打开文件并存入信息;#include<stdio.h>#defineNUM5typedefstructstudent{ charname[100]; charsex; floatscore;}stu;intmain(){ FILE*fp=NULL; if((NULL==(fp=fopen("stu_data","w")))){ perror("fopen");retur......
  • 【数据结构与算法】拓扑排序,关键活动,关键路径 详解
    拓扑排序算法booltopologicalSort(){ stack<int>stk; intid[N]; intcnt=0; for(inti=1;i<=n;i++){ if(!inDeg[i]){ stk.push(i); } id[i]=inDeg[i]; } while(stk.size()){ intt=stk.top(); stk.pop(); cout<<t<......
  • 数据结构/排序/堆排序 --- 逻辑讲解、代码实现、图形展示
    一、总体逻辑:    1.写一个交换的函数swap备用    2.写一个维护堆的性质的函数heapify备用    3.数组-> 堆(不明白的别急,后面会详细解释)    4.维护整个堆(看不懂别急别急别急)    5.堆顶和堆底的最后一个元素互换(不明......
  • MySQL中实现查询并按需要排序
    在MySQL中,实现查询并按需要排序主要使用SELECT语句,并结合ORDERBY子句。以下是一些基本的使用示例:基本查询和排序 SELECTcolumn1,column2,...FROMtable_nameORDERBYcolumn1ASC,column2DESC;column1,column2,...:你想查询的列名。table_name:你想查询的表名。......