首页 > 其他分享 >排序详解

排序详解

时间:2023-05-24 18:46:50浏览次数:36  
标签:10005 code int pos ++ 详解 排序

排序

简单排序

插入排序

普 code

int n, cnt = 0;		 // 数组长度 插入数组长度 
int a[10005], r[10005];	 // 原数组 插入数组 

void InsertSort(int x) { // 插入 x 
  int pos = 0;	         // 记录 x 应插入的位置 
  
  while (pos < cnt && r[pos] < x) pos++;
        		 // 直到找到大于等于 x 的数 
  for (int i = cnt; i > pos; i--)
  	r[i] = r[i-1];
                         // 后移数组 
		
  r[pos] = x;
  cnt++;		 // 插入数组长度加一 
}

空间优化 code

int n;
int a[10005];

void InsertSort() {
 for (int i = 0; i < n; i++) {
 	int pos = 0, x = a[i];
	while (pos < i && a[pos] < a[i]) pos++;		
	for (int k = i; k > pos; k--)
	    a[k] = a[k-1];
	
	a[pos] = x;
   }
} 

冒泡排序

普 code

void bubble_sort(int* a, int n) {
bool f = 1;
	
while (f) {
	bool f = 0;
	for (int i = 1; i < n; i++)
		if (a[i] > a[i+1]) swap(a[i], a[i+1]), f = 1;
  }
	
return ;
}

常数优化 code

int n;
int a[10005];

void BubbleSort(int n, int a[]) {
for (int i = 0; i < n; i++) {
	for (int j = 0; j < n - i - 1; j++) {
		if (a[j] > a[j+1]) swap(a[j], a[j+1]);
	}
  }
}

选择排序

普 code

int n;
int a[10005];

void SelectSort(int n, int a[]) {
	for (int i = 0; i < n; i++) {
		int key = i;
		
		for (int j = i + 1; j < n; j++)
			if (a[j] < a[key]) key = j;
			
		swap(a[i], a[key]);
	}
}

优化 code

int n;
int a[10005];

void SelectSort(int n, int a[]) {
	for (int i = 0; i < n; i++) {
		for (int j = i + 1; j < n; j++)
			if (a[j] < a[i]) swap(a[j], a[i]);
	}
}

复杂度

时间复杂度

插入排序

O (n ^ 2)

冒泡排序

O (n ^ 2)

选择排序

O (n ^ 2)

实用排序

归并排序

O (n log n)

code

int n;
int a[10005], t[10005];        // a 原数组 t 排序数组 

void MergeSort(int l, int r) {
	if (l == r - 1) return ;
	
	int mid = (l + r) >> 1;
	
	MergeSort(l, mid); MergeSort(mid, r);
	
	int p = l, q = mid, k = l;
	
	while (p < mid && q < r) {
		if (a[p] < a[q]) t[k++] = a[p++];
		else t[k++] = a[q++];
	}
	
	while (p < mid) t[k++] = a[p++]; // 复制剩余数组 
	while (q < r) t[k++] = a[q++];
	
	for (int i = l; i < r; i++)
		a[i] = t[i];
}

快速排序

O (n log n)

code

int n;
int a[10005], t[10005];

void QuickSort(int l, int r) {
	if (l >= r - 1) return ;
	
	int flag = a[rand() % (r - l) + l];
	int p = l, q = r;
	
	for (int i = l; i < r; i++) {
		if (a[i] < flag) t[p++] = a[i];
		else if (a[i] > flag) t[--q] = a[i];
	}
	
	for (int i = p; i < q; i++) // 复制剩下等于 flag 的数 
		t[i] = flag;
		
	for (int i = l; i < r; i++)
		a[i] = t[i];
		
	QuickSort(l, p);
	QuickSort(q, r);

特殊排序

字符串 sort 排序

In bool cmp(const string &a, const string &b) {
	return ((a + b) > (b + a));
}

标签:10005,code,int,pos,++,详解,排序
From: https://www.cnblogs.com/Gery-blog/p/17429213.html

相关文章

  • Burp模块详解
    参考手册目录全文https://portswigger.net/burp/documentation/contentsTarget模块记录流量HTTPHistory按时间顺序记录Target按主机或域名分类记录HTTPHistory会记录很多次Target模块的作用把握网站的整体情况对一次工作的域进行分析分析网站存在的攻击面攻击面对于一个软件系......
  • java 多线程:synchronized 详解
    总结一个锁对象只能同时被一个线程持有,分为对象锁和类锁对象锁:每个对象都可以作为锁(几个不同的对象就是几个锁)类锁:字节码对象也能作为锁(全局唯一)同步方法不能自定义锁,只能是默认的锁(非静态:this,静态:class);同步代码块默认的锁和方法一样(非静态:this,静态:class,普通方法里面可以......
  • NumPy_数据处理详解—矩阵运算-矩阵拼接
    基础内容坐标轴axis维度ndim和形状shape以及元素各个轴元素的个数索引--单个元素切片--多个元素[start:end:step]不包括终点的值当start是0时,可以省略;当end是列表的长度时,可以省略. trans_matrix[:3,:3] trans_matrix[......
  • 排序与分页
    1.排序数据1.1排序规则使用ORDERBY子句排序ASC(ascend):升序DESC(descend):降序ORDERBY子句在SELECT语句的结尾1.2单列排序mysql>SELECT*FROMjob_historyORDERBYdepartment_idDESC;+-------------+------------+------------+------------+-----------......
  • CAShapeLayer 使用详解
    CAShapeLayer使用详解////JFProcessView.m//test_JFProcessView_01////Createdbyjeffasdon16/7/4.//Copyright©2016年jeffasd.Allrightsreserved.//#import"JFProcessView.h"@interfaceJFProcessView()@property(nonatomic,strong)......
  • Spring MVC +MyBatis3全注解实例详解
    SpringMVC3.0.5+Spring3.0.5+MyBatis3.0.4全注解实例详解(一):[url]http://www.blogjava.net/bolo/archive/2011/05/23/349655.html[/url]如何配置Eclipse,Maven,Jetty并运行工程.如是使用Tomcat的话,改插件为:[url]http://tomcat.apache.org/maven-plugin......
  • javascript的 this 详解以及apply与call的用法意义及区别
    [color=red][b]关于JavaScript中apply与call的用法意义及区别[/b][/color][url]http://www.cnitblog.com/yemoo/archive/2007/11/30/37070.aspx[/url][color=red][b]JAVASCRIPTTHIS详解[/b][/color]在面向对象编程语言中,对于this关键字我们是非常熟悉的。比如C++、C#和Java等都......
  • iOS OpenGL ES FBO 帧缓存区 渲染缓存区详解
    原文地址:https://developer.apple.com/library/content/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/WorkingwithEAGLContexts/WorkingwithEAGLContexts.html#//apple_ref/doc/uid/TP40008793-CH103-SW6绘制到其他渲染目的地Framebuffer对象是渲染命令的目标。......
  • 快速排序
    参考实现'''快速排序复杂度O(nlogn)'''defpartition(list,left,right):#存第一个元素temp=list[left]whileleft<right:whilelist[right]>=tempandleft<right:#右边找比temp小的元素right-......
  • Flutter三棵树系列之详解各种Key
    简介key是widget、element和semanticsNode的唯一标识,同一个parent下的所有element的key不能重复,但是在特定条件下可以在不同parent下使用相同的key,比如page1和page2都可以使用ValueKey(1)。常用key的UML关系图如上,整体上key分为两大类-LocalKey和GlobalKey,这两个key都是抽象类......