常用排序算法的实现

Java排序算法大全:实现常用的排序算法 排序算法是计算机科学中常用的重要算法之一,它可以将一组元素按照特定的顺序进行排列。在Java编程中,我们经常需要使用排序算法对数据进行排序,以便更方便地进行查找和处理。本文将介绍几种常用的排序算法,并提供相应的Java代码实现。以上是四种常用的排序算法的Java实现。在实际应用中,根据排序数据的规模和特点,选择合适的排序算法可以提高程序的效率和性能。除了上述介绍的排序算法,还有许多其他排序算法,如归并排序、堆排序等,读者可以进一步研究和实践。希望本文对你理解和实践Java中的排序算法有所帮助! 阅读详情

1. 排序分类

In-place sort(不占用额外内存或占用常数的内存):插入排序、选择排序、冒泡排序、堆排序、快速排序。
Out-place sort:归并排序、计数排序、基数排序、桶排序。

内部排序:数据记录在内存中进行排序。
外部排序:排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。

stable sort:插入排序、冒泡排序、归并排序、计数排序、基数排序、桶排序。
unstable sort:选择排序(5 8 5 2 9)、快速排序、堆排序。


2. 对于不稳定的算法的改进

在每个输入元素加一个index,表示初始时的数组索引,当不稳定的算法排好序后,对于相同的元素对index排序即可。


3. 插入排序

将一个记录插入到已经有序的列表中,得到一个新的有序序列,序列长度增加1;
从序列的第一个数开始,看成有序的序列,然后从第二个数开始逐步插入,直到遍历全部序列中的数;
需要设立临时值;
对于相等元素的处理方法应该是相同的(要么放在有序序列中的值的前面,要么放在后面),所以插入排序稳定;

特点:stable sort、In-place sort
最优复杂度:当输入数组就是排好序的时候,复杂度为O(n),而快速排序在这种情况下会产生O(n^2)的复杂度。
最差复杂度:当输入数组为倒序时,复杂度为O(n^2)
插入排序比较适合用于“少量元素的数组”。


4. 希尔排序


先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。

希尔排序也是一种插入排序。


5. 选择排序

在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。

特性:In-place sort,unstable sort。
思想:每次找一个最小值。
最好情况时间:O(n^2)。
最坏情况时间:O(n^2)。


6. 堆排序

堆排序是一种树形选择排序,是对直接选择排序的有效改进。

特性:unstable sort、In-place sort。
最优时间:O(nlgn)
最差时间:O(nlgn)
思想:运用了最小堆、最大堆这个数据结构,而堆还能用于构建优先队列。


7. 冒泡排序


在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

特点:stable sort、In-place sort
思想:通过两两交换,像水中的泡泡一样,小的先冒出来,大的后冒出来。
最坏运行时间:O(n^2)
最佳运行时间:O(n^2)

8. 快速排序

被誉为“20世纪十大经典算法之一”。

1)选择一个基准元素,通常选择第一个元素或者最后一个元素,
2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值比基准值大。
3)此时基准元素在其排好序后的正确位置
4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。

特性:unstable sort、In-place sort。
最坏运行时间:当输入数组已排序时,时间为O(n^2),当然可以通过随机化来改进(shuffle array 或者 randomized select pivot),使得期望运行时间为O(nlgn)。
最佳运行时间:O(nlgn)
快速排序的思想也是分治法。
当输入数组的所有元素都一样时,不管是快速排序还是随机化快速排序的复杂度都为O(n^2)


9. 归并排序

归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。

特点:stable sort、Out-place sort
思想:运用分治法思想解决排序问题。
最坏情况运行时间:O(nlgn)
最佳运行时间:O(nlgn)


10. C/C++实现

/* 
*	八大排序算法简单实现
*	peic	2015/10/28
*
*   所有排序规则都是从小到大 
*/



#include <stdio.h>
#include <time.h>
#include <stdlib.h>

typedef int ElementType;

/*
*	打印数组
*/
void printList(ElementType* list, int len)
{
	//不同数据类型需要改变格式化输出
	int i;
	for(i=0; i < len-1; i++)
	{
		printf("%d, ", list[i]);
	}
	printf("%d\n", list[i]);
}


/*
*	产生随机数组
*/
void CreateRandList(ElementType* list, int size)
{
	int i;
	int t = 10, d = 100;

	//初始化随机化种子
	srand(time(NULL)); 

	for(i=0; i<size; i++)
	{
		//生成0-100随机数
		*(list + i) = rand()%(d - t) + t;
	}
	printf("Random List:\n");
	printList(list, size);
}


/*
*	两个数交换
*/
void swap(ElementType* a, ElementType* b)
{
	ElementType tmp = *a;
	*a = *b;
	*b = tmp;
}



/* 
*	直接插入排序,需要设置哨兵
*	稳定(对相等元素的处理是固定的)
*	复杂度n^2
*/
void InsertSort(ElementType* list, int len)
{
	int i, j;
	for(i = 1; i < len; i++)
	{
		//将一个数list[i],插入到有序数组中
		if(list[i] < list[i-1])
		{
			//将list[i]保存
			int tmp = list[i];
			
			//将前面排好序的数组后移,找到list[i]的位置
			j = i - 1;
			while(tmp < list[j])
			{
				list[j+1] = list[j];
				j--;
			}
			list[j+1] = tmp;
		}
	}
	printf("InsertSort result: \n");
	printList(list, len);
}


/* 
*	希尔排序,是插入排序的一种,也称缩小增量排序
*	不稳定
*	时间复杂读:比o(n^2)好一些,依赖于步长的选择
*/
void ShellSort(ElementType* list, int len)
{
	//初始步长为len/2
	int dk = len / 2;

	//一直做步长减少的插入排序,直到步长为1
	while(dk >= 1)
	{
		
		//对子序列做插入排序,从dk开始,与前面的数进行比较
		int i = 0;
		for(i=dk; i < len; i++)
		{
			//插入排序的子序列间隔为步长dk
			if(list[i] < list[i-dk])
			{
				ElementType tmp = list[i];
				int j = i - dk;
				while(tmp < list[j] && j >= 0)
				{
					list[j+dk] = list[j];
					j -= dk;
				}
				list[j+dk] = tmp;
			}
			//printList(list, len);
		}

		//缩短步长
		//printf("dk = %d\n", dk);
		//printList(list, len);
		dk /= 2;
	}
	printf("ShellSort result: \n");
	printList(list, len);
}


/* 
*	直接选择排序
*	每次选择子序列中最小的数和序列相应位置的值进行交换
*	遇到相等元素的每次操作都是一样的,所以排序是稳定的
*	可以分情况,每次选择数组中的最大值和最小值进行交换,减少循环次数
*/
void SelectedSort(ElementType* list, int len)
{
	int i,j;
	int min_postion = 0;
	for(i=0; i<len; i++)
	{
		min_postion = i;
		for(j=i+1; j<len; j++)
		{
			if(list[j] < list[min_postion])
			{
				min_postion = j;
			}
		}
		//printf("min――position:----%d:\n", min_postion);
		swap(list+i, list+min_postion);
	}
	printf("SelectedSort result: \n");
	printList(list, len);
}


/* 
*	堆排序(树形选择排序)
*/

/*
*	调整堆,将输入的数组调整成有序的堆(二叉树,满足左右子节点小于父节点)
*/
void AdjustHeap(ElementType* list, int parent, int len)
{
	//左节点一定存在
	int lchild, minchild;
	lchild = parent * 2 + 1;

	//adjust tree
	while(lchild < len)
	{
		//寻找较大的子节点,右节点不一定存在
		if((lchild + 1) < (len - 1) && list[lchild + 1] > list[lchild])
			minchild = lchild + 1;
		else
			minchild = lchild;
			
		//交换父节点和较大的子节点,使得父节点大于左右子节点
		if(list[parent] < list[minchild])
		{
			swap(list+minchild, list+parent);
			//因为子节点和父节点发生交换,需要向下更新
			parent = minchild;
			lchild = parent * 2 + 1;
		}
		else
			break;
	}
}

void BuildHeap(ElementType* list, int len)
{
	int i, lchild, minchild;
	for(int parent = (len - 1) / 2; parent >= 0; parent--) 
	{	
		AdjustHeap(list, parent, len);
	}
	printf("Tree result: \n");
	printList(list, len);
}

void HeapSort(ElementType* list, int len)
{
	for(int i = len; i >= 1; i--)
	{
		AdjustHeap(list, 0, i);
		swap(list, list + i - 1);
	}
	printf("HeapSort result: \n");
	printList(list, len);
}


/*
*	基本冒泡排序
*/
void BubleSort(ElementType* list, int len)
{
	for(int i = 0; i < (len - 1); i++)
	{
		for(int j = 0; j < len - i - 1; j++)
		{
			if (list[j+1] < list[j])
			{
				swap(list+j, list+j+1);
			}
		}
	}
	printf("BubleSort result: \n");
	printList(list, len);
}


/*
*	改进冒泡排序:一次循环中进行正反两次双向比较,减少循环次数
*/
void BubleImproveSort(ElementType* list, int len)
{
	int low = 0, high = len - 1;
	while(low++ <= high--)
	{
		for(int i = 0; i < high; i++)
		{
			if(list[i] > list[i+1])
				swap(list+i, list+i+1);
		}
		for(int j = high; j > low; j--)
		{
			if(list[j] < list[j-1])
				swap(list+j, list+j-1);
		}
	}
	printf("BubleImproveSort result: \n");
	printList(list, len);
}


/*
*	快速排序
*	在不用开辟新内存空间的排序算法中,效果最好
*	不稳定
*/
void QuickSort(ElementType* list, int len)
{
	int low = 0, high = len;
	int i, j;
	//初始化key
	ElementType key = list[low];
	
	//递归终止条件,序列长度为1则无需排序,返回
	if(len <= 1)
		return;


	//将序列以key为分界线分成小于key和大于key两部分
	while(low < high)
	{
		//从后向前,找到第一个比key小的数
		while(--high> low)
		{
			if(list[high] <= key)
			{
				//当从后向前遍历的时候,key在list[low]的位置上
				swap(list+high, list+low);
				//交换key和相应数的位置后,需要更新key的位置
				key = list[high];
				break;
			}
		}
		
		//从前往后,找第一个比key大的数
		while(++low < high)
		{
			if(list[low] >= key)
			{
				//当从前向前遍历的时候,key在list[high]的位置上
				swap(list+low, list+high);
				//交换key和相应数的位置后,需要更新key的位置
				key = list[low];
				break;
			}
		}
	}
	//printList(list, len);
	
	//递归两个子序列
	QuickSort(list, low);
	QuickSort(list+low, len - low);

	printf("QuickSort result: \n");
	printList(list, len);
}


/*
*	归并排序
*	利用分治思想,建立在归并操作上,可以先定义归并操作,然后递归调用
*/

/*
*	归并操作,将一个数组的两部分,归并到辅助数组中
*	list[start, centre]和list[centre+1, end]是待归并数组的两部分
*/
void Merge(ElementType* list, int start, int centre, int end, ElementType* result)
{
	int i=start, j=centre+1, k=start;
	
	//开辟新数组存放归并的序列
	
	//比较归并两个子序列,数值小的优先,直到一个序列比较完毕
	while( i <= centre && j <= end) 
	{
		if(list[i] < list[j])
			result[k++] = list[i++];

		else
			result[k++] = list[j++];
	}
	
	//将未完全归并的序列接在新数组的后面
	while(i <= centre)
		result[k++] = list[i++];	
	while(j <= end)
		result[k++] = list[j++];
	
	/*查看结果
	printf("---start==%d,----centre==%d,----end==%d\n", start, centre, end);
	printf("list--------\n");
	printList(list, 10);
	printf("result********\n");
	printList(result, 10);
	*/
	
	//将结果保存在原序列中(也可以在归并循环中直接将开辟的tmp和list进行交换)
	for (i = start; i <= end; i++)
		list[i] = result[i];
	
}

/*
*	归并排序
*/
void MergeSort(ElementType* list, int len)
{
	ElementType* tmp = (ElementType*)malloc(sizeof(ElementType) * len);
	
	//初始归并的每个子序列长度
	int subLength = 1;
	while(subLength < len)
	{
		//归并子序列的起点、中间位置和结束位置
		int start = 0;
		int mergeLength = 2 * subLength;
		
		//对序列的若干子序列进行循环归并
		//对等长子序列进行归并
		while(start + mergeLength < len)
		{
			//初始归并的子序列(数组的前两个数)
			int centre = start + subLength-1;
			int end = start + mergeLength-1;			
			Merge(list, start, centre, end, tmp);
			start = start + mergeLength;
		}
		//对不等长子序列进行归并
		if(start + subLength < len)
		{
			int centre = start + subLength - 1;
			int end = len - 1;
			Merge(list, start, centre, end, tmp);
		}
		//改变归并长度
		subLength *= 2;
	}
	free(tmp);
	printf("MergeSort result: \n");
	printList(list, len);
}





void main()
{
	const int size = 10;
	ElementType list[size];
	CreateRandList(list, size);
/*	
	ElementType list1[size];
	CreateRandList(list1, size);
	InsertSort(list1, size);
	
	
	ElementType list2[size];
	CreateRandList(list2, size);
	ShellSort(list2, size);

	ElementType list3[size];
	CreateRandList(list3, size);
	SelectedSort(list3, size);

	BuildHeap(list, size);
	HeapSort(list, size);

	BubleSort(list, size);
	
	BubleImproveSort(list, size);

	QuickSort(list, size);
*/
	MergeSort(list, size);

	system("pause");
}




本文关于排序算法的基本原理和知识,部分参考了下面的博文:


http://blog.youkuaiyun.com/hguisu/article/details/7776068
http://blog.youkuaiyun.com/xiazdong/article/details/8462393
Matlab/simulink频率响应分析方法 Matlab/Simulink仿真系列问题一.电气模块与信号模块 一.电气模块与信号模块 阅读详情

相关推荐

AIDD-人工智能药物设计-构建基于机器学习方法的在线预测平台高准确预测药物诱导骨毒性

在此基础上,提取多种药物分子特征,包括分子指纹(如MACCS、Morgan、RDKit、TopologicalTorsion、AtomPairs与Descriptors)及分子图谱,通过Transformer编码器与神经网络进行机器学习模型训练。最后,将训练好的模型部署为在线Web服务器(BoneToxPD),供用户快速预测药物的骨毒性。本研究不仅在骨毒性预测的准确性方面取得了突破,还在模型解释性方面提供了新的视角,通过注意力机制精准识别出影响骨毒性的关键化学基团,推动药物研发领域更安全、更高效的发展。

itwangyang520的博客 1081

常用排序算法的java实现

/** * 冒泡排序 * 时间复杂度: 最小 = O(n), 最大 = O(n^2), 平均 = O(n^2) * * @param data 待排序序列 * @return */ public static int[] bubbleSort(int[] data) { if (data == null || data.length == 0 || data.length =...

LittleBeen 288

CAPL编程入门:从零开始掌握汽车通信脚本语言

本文详细介绍了CAPL编程的基础知识,从开发环境搭建到核心语法精要,再到总线通信实战和高级调试技巧。CAPL作为汽车通信脚本语言,专为CAN、LIN等网络协议设计,帮助工程师高效完成车载网络测试。通过实战案例和性能优化建议,读者可以快速掌握CAPL编程技能。

s1t2u3的博客 979

常用的排序算法及Python实现

2. **选择排序**(Selection Sort)3. **插入排序**(Insertion Sort)7. **计数排序**(Counting Sort)1. **冒泡排序**(Bubble Sort)4. **归并排序**(Merge Sort)5. **快速排序**(Quick Sort)8. **桶排序**(Bucket Sort)9. **基数排序**(Radix Sort)6. **堆排序**(Heap Sort)你可以根据具体需求选择合适的排序算法。### 1. 冒泡排序。

Zero_pl的博客 362

数学文化赏析MOOC笔记【2023】

深圳大学UOOC课程《数学文化赏析》课程笔记

simplenthpower的博客 1753

文档信息抽取技术:从非结构化文本到结构化信息的旅程

文档信息抽取技术是一种将非结构化文本转化为结构化信息的技术。这种技术可以从各类文档中自动提取出如实体、关系和其他重要信息,并将它们转化为方便计算机进一步处理和分析的格式。

INTSIG的博客 981

python实现常用排序算法_Python实现的几个常用排序算法实例

#encoding=utf-8import randomfrom copy import copydef directInsertSort(seq):""" 直接插入排序 """size = len(seq)for i in range(1,size):tmp, j = seq[i], iwhile j > 0 and tmp < seq[j-1]:seq[j], j = seq[j-...

weixin_39979332的博客 90

spm FMRI 各种小问题合集

预处理 1、预处理结果从normalize之后开始头歪、变形 问题描述:如下图 原因:DICOM2NIfTI时必须检查对应的T1像。下面是两种错误形式,第一种容易发现,第二种容易忽视,大脑失状位左右颠倒。 解决:重新转了一回格式,建议用SPM fmri进行格式转换。之前是用MRIconvert转换的,用了两台电脑,有的T1结果是对的,不确定什么原因产生的错位,操作都是一样的。 2、Check reg大脑图片边缘出边框 问题描述: 原因:应该是图片排版导致的,单独check就会发现大脑是全的。 解决

weixin_44669441的博客 1677

常用几大排序算法实现

本文主要罗列总结几大常用排序算法。 1、冒泡法排序 3种实现: 2、直接插入法排序 3种实现: 3、希尔排序 4、直接选择排序 5、归并排序 6、快速排序 7、堆排序 8、基数排序 9、 ...

shaderdx的专栏 458

Chatbox使用指南

Chatbox使用指南

weixin_65289420的博客 2万+

样本不均衡时AUC反而下降?用imbalanced-learn库实战解决分类陷阱

本文探讨了样本不均衡时AUC指标下降的现象,并通过imbalanced-learn库实战演示了如何解决这一分类陷阱。文章详细分析了不同采样技术(如SMOTE、ADASYN)对模型性能的影响,并提供了XGBoost和逻辑回归模型的优化建议,帮助数据科学家在实际项目中做出更明智的决策。

weixin_29174013的博客 343

Python常用排序算法实现对比

本文总结了Python中三种常用排序算法:冒泡排序、快速排序和归并排序。冒泡排序简单直观但效率较低,适合小规模数据;快速排序采用分治思想,适用于大规模数据;归并排序通过分解子序列递归排序,具有较好时间复杂度。文章对比了各算法的实现方式和优缺点,指出应根据具体需求和数据特点选择合适的排序算法,并强调需持续关注排序算法的技术发展。

2501_90410679的博客 84

Linux内核驱动模型--PCIe(PCI Express)驱动​​

本文系统介绍了Linux内核中PCIe驱动的设计与实现。首先从架构定位入手,指出PCIe驱动基于PCI子系统扩展支持高速、低功耗特性。核心数据结构struct pci_driver包含设备匹配表id_table、生命周期函数probe/remove等关键组件。文章详细解析了驱动与设备的绑定流程、资源管理机制,并重点阐述了MSI-X中断、电源管理、热插拔和多队列等高级特性实现方案。最后提供了lspci、dmesg等调试工具的使用方法,总结了PCIe驱动在支持高性能设备中的关键作用。全文通过架构设计、核心结构、

amy_mhd的博客 428

Python的常用排序算法实现

该博客使用Python实现了选择排序、插入排序、冒泡排序、快速排序和归并排序等五种排序算法,以及演示了Python内置排序算法的两种使用方式

飞机火车巴雷特的博客 1224

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

[转载] java实现四种常用排序算法

参考链接: 用Java排序 四种常用排序算法 ##注:从小到大排 ##冒泡排序## 特点:效率低,实现简单 思想:每一趟将待排序序列中最大元素移到最后,剩下的为新的待排序序列,重复上述步骤直到排完所有元素。这只是冒泡排序的一种,当然也可以从后往前排。 public void bubbleSort(int array[]) { int t = 0; for (int i = 0; i < array.length - 1; i++) ...

ld909的博客 76

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

排序算法——从原理到实现全面解析,一文掌握8大常用排序算法

本文全面介绍了常见的排序算法,包括插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、交换排序(冒泡排序和快速排序)、归并排序以及非比较排序(计数排序)。文章详细讲解了每种算法的实现思路、代码示例和时间复杂度分析,并提供了完整的测试代码和性能对比。通过稳定性分析和复杂度比较,帮助读者理解不同排序算法的适用场景。最后附有完整的C语言实现代码,便于读者参考和实践。

zhangzhangip的博客 1745

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java实现四种常用排序算法

四种常用排序算法 冒泡排序 特点:效率低,实现简单 思想(从小到大排):每一趟将待排序序列中最大元素移到最后,剩下的为新的待排序序列,重复上述步骤直到排完所有元素。这只是冒泡排序的一种,当然也可以从后往前排。 public void bubbleSort(int array[]) { int t = 0; for (int i = 0; i &amp;amp;lt;...

huosanghuakai 10万+

Java常用排序算法实现

Java常用排序算法 插入排序 希尔排序 简单排序 堆排序 冒泡排序 快速排序

CT的专栏 1074

python实现几种常用的排序算法

python实现几种常用的排序算法一、冒泡排序二、选择排序三、插入排序四、shell 排序五、快速排序六、归并排序 一、冒泡排序 # 冒泡排序:每次循环比较相邻的两个元素 def maopao_sort(nums): for i in range(n - 1): for j in range(n - 1 - i): if nums[j] > nums[j + 1...

qq_36072270的博客 220

常用排序算法的Python实现

使用Python实现常用排序算法,如冒泡排序、插入排序、选择排序、快速排序、归并排序

Anning 1018

Java常用的八种排序算法与代码实现

Java常用的八种排序算法与代码实现一、直接插入排序算法1.1 基本思想:1.2 代码实现二、直接插入排序算法2.1 基本思想 一、直接插入排序算法 1.1 基本思想: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素;排序过程即每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的有序表,重复n-1次完成整个排序过程。 实例: 初始状态...

HDMI小不点 377

python排序算法的库_Python实现的几个常用排序算法实例

前段时间为准备百度面试恶补的东西,虽然最后还是被刷了,还是把那几天的“战利品”放点上来,算法一直是自己比较薄弱的地方,以后还要更加努力啊。下面用Python实现了几个常用的排序,如快速排序,选择排序,以及二路并归排序等等。#encoding=utf-8import randomfrom copy import copydef directInsertSort(seq):""" 直接插入排序 ""...

weixin_42498003的博客 291

常用排序算法的实现及分析

常用排序算法 排序算法的实际应用场景很多, 直接插入排序 冒泡排序 快速排序 归并排序 堆排序 基数排序

思维特二的博客 295

常用排序算法的C++实现汇总

常用排序算法的C++实现汇总 以下为常用排序算法的C++实现。其中快速排序,总结实现了双路快排和三路快排。最后还实现了一个SortHelper.h的文件,可以随机生成无序或者近似有序的数据,检验数组是否已经排好序,以及各排序算法程序运行时间对比。 插入排序 template<typename T> void insertionSort(vector<T>& nums) { unsigned long n = nums.size(); for(unsigned int

guihunkun的博客 272

常用排序算法实现

常用排序算法 目录 常用排序算法 1 1. 插入排序 1 2. 希尔排序 2 3. 冒泡排序 3 4. 快速排序 4 5. 选择排序 5 6. 归并排序 6 1. 插入排序 public class InsertSort { /** * @Title: insertSort * @Descr...

Young_Fee的博客 395
上一篇: MySQL操作中的Error: 1064(42000)问题
下一篇: cache测试及其矩阵优化
Parle
博客等级 码龄14年 36粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值