`

Sort研究

 
阅读更多
  //1.BubbleSort 

package com.zhe.sort;

/**
 * sortedIndex :已排序了的数组索引,最开始都未排序,所以索引为 -1
 * @author Administrator
 *
 */
public class BubbleSort {
	public static long[] sort(long[] arr){
		long temp = 0;
		for(int sortedIndex = -1; sortedIndex <arr.length-1;sortedIndex ++){
			
			for(int cursor = arr.length-1;cursor >sortedIndex ; cursor --){
				if(cursor > 0 && arr[cursor]<arr[cursor-1]){ //防止cursor为0时,cursor-1越界
					temp = arr[cursor];
					arr[cursor] = arr[cursor-1];
					arr[cursor-1] = temp;
					
				}
			}
		}
		
		
		
		return arr;
	}
}


package com.zhe.sort;

public class InsertSort {

	/**
	 * 插入排序就是保证前面的i个有序,插入到前面有序队列的适当位置
	 * 在有序队列中比 插入数大的  都后移
	 * @param args
	 */
	
	public static long[] sort(long[] arr ){
		//i从1开始,表示第一个位置需要被插入,第0个位置之前没有与之比较的对象,所以从1开始
		for(int sortingIndex=1; sortingIndex<arr.length ; sortingIndex++){
			long temp = arr[sortingIndex];
			int cursor = sortingIndex-1;              //j记录需插入的数
			int emptyPos = sortingIndex;
			
			while(cursor>0 && arr[cursor]>temp){
				arr[emptyPos]=arr[cursor];
				emptyPos = cursor;
				cursor--;
			}
			arr[emptyPos] = temp;
		}
		return arr;
	}

		/**
		 * {3,8,9,7,6,5}
		 *        8 9
		 */
}

package com.zhe.sort;

/**
 * 这个思想是: 递归
 * 先找到一个值,然后使得左边小于这个值,右边大于这个值(数组的最后一个值为分割值)
 * --->归的部分,因为归的部分太复杂,所以搞了一个方法包装起来
 * 
 * 然后再让这两部分分别排序---->递的部分
 * 因为如果只有一个元素,那么这个元素肯定是有序的。。。
 * @author Administrator
 *
 */
public class QuickSort {
	static long[] arr;
	
	public static void sort(long[] arr,int left,int right){
		if(left > right){
			QuickSort.arr = arr;
			return ;
		}
		else{
			int middle = participate(arr,left,right);
			sort(arr, left, middle-1);
			sort(arr,middle+1,right);
		}
		
	}

	private static int participate(long[] arr,int left,int right) {
		
		int rowLeft = left; 
		int rowRight = right;
		long middleData = arr[right];
		long temp=0;
		left --;
		while(left<right){
			while(left<right&&arr[++left]<middleData);//保证left拿到的一定大于middleData
			while(left<right&&arr[--right]>middleData);//保证right拿到的一定小于middleData
		/*	while(left < right){
				if(arr[left]<middleData)left++;
				else break;
			}
			while(left<right){
				if(arr[right]>middleData)right--;
				else break;
			}*/
			if(left<right){
				temp = arr[right];
				arr[right]=arr[left];
				arr[left] = temp;
			}
		}
		arr[rowRight] = arr[right];
		arr[right] = middleData;
		return right;
	}

	public static long[] getArr() {
		return arr;
	}
}
/**
 * 1     2    3    4    7     8     9     6
 *                     left   
 * */


package com.zhe.sort;

/**
 * 与冒泡唯一的不同就是冒泡排序是 比一次交换一次,而这个是比一趟交换一次
 * sortedIndex :已排序了的数组索引,最开始都未排序,所以索引为 -1
 * @author Administrator
 *
 */
public class SelectionSort {
	
 public static long[] sort(long[] arr){
	 
	 long temp = 0;
	 for(int sortedIndex=-1; sortedIndex < arr.length-1; sortedIndex++){
		int min = arr.length-1; //假设最后一个元素是最小值
		 for(int cursor=arr.length-1; cursor>sortedIndex; cursor--){
			 if(arr[min] > arr[cursor])min=cursor;
		 }
		 temp = arr[sortedIndex+1];
		 arr[sortedIndex+1]= arr[min];
		 arr[min] = temp;
	 }
	 return arr;
 }
}

package com.zhe.sort;
/**
 * 希尔排序是插入排序的改进,他可以先跳步插入,最后再来一次插入排序
 * 最大增加幅度规则 w = w*3+1 < arr.length;的最大h 值
 * @author Administrator
 *
 */
public class ShellSort {
	public static long[] sort(long[] arr){
		//选出最优增幅
		int w = 1;
		while(w*3+1< arr.length){
			w = w*3 +1;
		}
		while(w>0){
			//插入排序,因为第0个对象已经排序完毕,所以第一个对象是0+h=h
			//因为是分成h组,所以每一组的第一个都被认为是有序的
			for(int sortingIndex = w ;sortingIndex < arr.length ;sortingIndex++){
				long temp = arr[sortingIndex];
				int emptyPos = sortingIndex;
				int cursor = emptyPos -w;
				while(cursor >=0){
					if(arr[cursor]> temp){
						arr[emptyPos] = arr[cursor];
						emptyPos = cursor;
					}
					cursor -= w;
				}
				arr[emptyPos] = temp;
			}
			w = (w-1)/3; 		
		}
		return arr;
	}
}


当n较小时,对稳定性不做要求时用选择排序(他不是挨着操作元素),对稳定性有要求时用插入或者冒泡
当n较大时,关键元素比较随机,对稳定性没要求用快速排序,但是元素基本有序的话快速就变成了冒泡排序,因为不管怎么样他都会递归的
当n较大时,元素可能出现本身有序,对稳定性没要求用堆排序。(建立堆的过程比较漫长)
当n较大时,元素可能出现本身有序,对稳定性有要求,空间允许情况下用归并排序
分享到:
评论

相关推荐

    有关sort函数的用法和研究.pdf

    有关sort函数的用法和研究

    SORT目标跟踪算法论文

    SORT(Simple Online and Realtime ...总的来说,SORT算法是计算机视觉领域多目标跟踪中的一个重要里程碑,它以高效、实时和易实施的特点,为实际应用提供了强大支持,并启发了一系列后续研究,推动了整个领域的进步。

    ssd_deepsort.zip

    SSD(Single Shot MultiBox Detector)是一种流行的深度学习目标检测模型...对于研究者和开发者来说,这是一个了解和实践SSD、MXNet、DeepSort以及PyTorch集成的宝贵资源,有助于提升他们在目标检测和跟踪领域的技能。

    论文研究-Apriori-sort算法研究.pdf

    Apriori-sort算法是在Apriori算法基础上的改进,基本思想是把事务数据库变为以度表示的事务度数据库,并对事务度数据库进行排序。Apriori-sort算法查找频繁项集时,只扫描数据库Dd中满足d(Ck)≦d(Ti)的事务。对...

    毕业设计深度学习基于步态识别检测的多目标跨镜头跟踪算法研究项目源码.zip

    毕业设计深度学习基于步态识别检测的多目标跨镜头跟踪算法研究项目源码.zip毕业设计基于步态识别的多目标跨镜头跟踪算法研究 主算法:基于yoloV5-deepsort框架进行目标检测和跟踪+GaitSet算法 毕业设计深度学习基于...

    deepsort.rar

    本项目提供的"deepsort.rar"压缩包,包含了该任务的初赛代码和决赛优化代码,采用的是Cascade R-CNN与DeepSort相结合的方案,同时还提供了预训练权重和比赛权重,为研究者和开发者提供了宝贵的资源。 首先,我们来...

    c++版本的基于Yolov5的deepsort的实现

    这个实现不仅对研究人员和开发者有极大的价值,也适用于实际应用,如智能监控、自动驾驶、无人机航拍等场景,它能在这些环境中实时有效地跟踪多个移动的目标。通过结合Yolov5的强大检测能力和DeepSORT的精确跟踪技术...

    DeepSORT算法流程分析.md

    根据Deep SORT的代码进行算法流程分析,通过列举了前4 帧的跟踪流程,对每一帧各种结果的可能性进行了分析,便于研究多目标跟踪方向的道友们更好的理解代码流程。本人也是初学者,若有解释不到位或者借鉴不当之处,...

    基于python的yolov5-deepsort车流量统计车流统计轨迹显示源码

    《基于Python的Yolov5-DeepSort车流量统计与轨迹显示源码解析》 在当前的智能交通系统中,车流量统计与车辆轨迹分析...通过深入研究和实践,我们可以进一步提升算法性能,优化系统效率,为智慧城市的构建贡献力量。

    YOLOv5-Deepsort飞鸟视觉检测和跟踪

    这个项目为鸟类生态研究、野生动物保护等领域提供了有力的工具,能够自动识别和追踪鸟类,对于理解和保护鸟类行为具有重要意义。同时,该系统的技术也可以推广到其他领域,如交通监控、体育赛事分析等。

    deepsort-yolov3-车辆行人-跟踪结果.zip

    《深度学习目标检测与追踪:DeepSORT-..."deepsort-yolov3-车辆行人-跟踪结果.zip"的文件内容,为我们提供了该技术在实际应用中的具体表现,为研究者和开发者提供了一个直观的参考,有助于进一步优化和改进此类算法。

    DeepSORT-YOLOv5猫狗检测和跟踪+可视化目标运动轨迹

    在本文中,我们将深入探讨"DeepSORT-YOLOv5猫狗检测和跟踪+可视化目标运动轨迹"这一技术主题。这个项目结合了两种强大的...通过理解和应用这些技术,开发者和研究者可以进一步探索和改进目标识别和跟踪的效率和准确性。

    CSort内排序算法

    同时,这也可以作为进一步研究和优化排序算法的基础,例如,如何减少快速排序的最坏情况,或者如何提高插入排序的效率等。总的来说,这是一个极好的学习资源,可以帮助初学者建立起对排序算法的系统认知。

    目标跟踪+YOLOv8-deepsort 实现智能车辆跟踪+计数系统

    目标跟踪和YOLOv8-DeepSORT智能车辆跟踪计数系统的实现是一个综合性的计算机视觉任务,涉及了...通过实际操作,学习者不仅可以掌握理论知识,还能锻炼解决问题和调试代码的能力,为未来的研究和开发工作打下坚实基础。

    排序算法 sort 经典

    在计算机科学领域,排序算法是数据处理的核心技术之一,它用于将一组无序的数据元素按照特定...在“array_sort”这个主题中,我们可以进一步研究如何针对数组数据结构实现高效的排序和查找操作,以满足不同场景的需求。

    DeepSORT-YOLOv5无人机检测和跟踪+可视化目标运动轨迹

    PyTorch是Facebook开发的开源库,提供动态计算图功能,易于调试和实验,是许多AI研究和开发项目的首选工具。 6. **项目结构与文件**: “Yolov5_DeepSort_Pytorch-master-drone_1”可能是项目文件夹名,暗示该项目...

    DeepSORT-YOLOv5车辆检测和跟踪+可视化目标运动轨迹

    在IT领域,车辆检测和跟踪是一项重要的计算机视觉技术,它被广泛应用于智能交通、自动...通过深入研究和实践,可以进一步提升目标检测和跟踪的性能,比如优化模型参数、改进跟踪策略,或者扩展到更多类别的目标检测。

    基于YOLOv5+Deepsort算法实现车辆测速系统源码+文档说明(毕业设计).zip

    基于YOLOv5+Deepsort算法实现车辆测速系统源码+文档说明(毕业设计).zip基于Yolov5和DeepSORT算法,实现对校园内车辆和行人的追踪,并计算他们的速度以及检测是否发生碰撞。 该项目的主要目的是提供校园安全管理和...

Global site tag (gtag.js) - Google Analytics