`

几种排序算法小结

 
阅读更多
//冒泡排序
public class BubbleSort {
	void bubbleSort(int []mp){
		for (int i = 0; i < mp.length; i++) {
			for (int j = 0; j <i; j++) {
				if(mp[j]>mp[j+1]){
					int temp=mp[j];
					mp[j]=mp[j+1];
					mp[j+1]=temp;
				}
				
			}
			
		}
	}

}


//插入排序
//思想:后面一个跟前面所有的进行排序
public class InsertSort {
	void insertSort(int []cr){
		for(int i=0;i<cr.length;i++){
			for(int j=0;j<i;j++)
			{
				if(cr[i]<cr[j]){
					int temp=cr[i];
					cr[i]=cr[j];
					cr[j]=temp;
				}
				            
			}
		}
	
	}

}


//选择排序
public class SelectSort {
	void selectSort(int []xz){
		int k=0;
		for (int i = 0; i < xz.length; i++) {
			int temp=xz[i];
			k=i;
			for (int j = i; j < xz.length; j++) {
				
				if(temp>xz[j]){
					 temp=xz[j];
					 k=j;
				}
			}
			xz[k]=xz[i];
		   	xz[i]=temp;
		   	
		}
	
	}

}


//快速排序
public class QuickSort {
	void quickSort(int qs[]){
		int len=qs.length;
		
		quickSort2(qs, 0,len-1);
	}
	void quickSort2(int qs[],int left,int right){
		int pos;
		if(left<right){
			pos=findPos(qs,left,right);
			quickSort2(qs,left,pos-1);
			quickSort2(qs,pos+1,right);
		}
		
	}
	int findPos(int qs[],int left,int right){
		int val=qs[left];
		while (left<right) {
			while((val<=qs[right])&&(left<right))
				right--;
			qs[left]=qs[right];
			while((val>=qs[left])&&(left<right))
				left++;
			qs[right]=qs[left];
		
		}
		qs[left]=val;
		return left;
	}
	}

//归并排序
		int a[]={1,3,5,7,9,10,13};
		int b[]={2,4,6,8,9};
		int c[]=new int[12];//注意此数组的写法,不能写成int c[]={};
		MergerSort mergerSort=new MergerSort();
		mergerSort.mergerSort(a, a.length, b, b.length, c);
		for (int i = 0; i < c.length; i++) {
			System.out.print(c[i]+" ");
		}

//归并排序的初衷是合并两个有序的数列,让其变成一个有序的数列
public class MergerSort {
	void mergerSort(int a[], int m, int b[], int n, int c[]) {
		int i = 0;
		int j = 0;
		int k = 0;
		while (i < m && j < n) {
			if (a[i] < b[j]) {
				c[k++] = a[i++];
			} else {
				c[k++] = b[j++];
			}
		}
		while (i < m) {
			c[k++] = a[i++];
		}
		while (j < n) {
			c[k++] = b[j++];
		}
	}
}
/*快排,归并排,堆排序时间复杂度相同,但它们三者区别是快速排序和堆排序是不稳定的,
归并为稳定型,对于辅助空间堆排序要求最小,归并最多,它们排序的最好情况复杂度相同,
最坏的情况下快速排序要复杂些,根据数据的数量来说,选择归并或堆,
如果还要求考虑辅助空间,就用堆排序,在涉及稳定性方面则考虑归并(虽然所需空间较多)。
所以,选择那个排序要看题目要求........*/
  • 大小: 101.2 KB
分享到:
评论

相关推荐

    各种排序算法小结

    ### 各种排序算法小结 #### 一、引言 排序算法是在计算机科学中非常基础且常用的一类算法。由于在实际应用中往往需要处理大量数据,因此对排序算法的效率有着较高要求。通常,我们会关注算法的时间复杂度来评估其...

    数据结构排序算法小结

    这里我们将详细讨论几种经典的排序算法,包括快速排序、归并排序、堆排序、Shell排序、插入排序、冒泡排序以及选择排序。 1. **快速排序**:快速排序是由C.A.R. Hoare提出的,它采用了分治策略,以选定的“支点”...

    排序算法小结

    本篇文章将概述几种常见的排序算法,包括快速排序、归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序以及基数排序。 1. **快速排序**(QuickSort): - 快速排序采用了分治策略,以一个支点...

    各种经典排序算法小结---必知必会

    ### 各种经典排序算法小结---必知必会 #### 概述 排序算法是计算机科学中的一个重要组成部分,主要用于将一系列数据按照特定顺序(升序或降序)进行排列。排序算法的学习对于理解算法复杂度、算法设计原理以及提高...

    排序算法的稳定性和时间复杂度小结

    ### 排序算法的稳定性和时间复杂度小结 #### 一、引言 排序算法是计算机科学中的基本算法之一,广泛应用于各种场景之中。排序算法不仅关注排序的速度...总之,理解每种排序算法的特点对于合理选择和应用算法至关重要。

    JavaScript中几种常见排序算法小结

    本文将重点介绍JavaScript中常见的四种排序算法:冒泡排序、插入排序、快速排序和希尔排序。这些算法各有特点,适用于不同的场景,理解它们的工作原理有助于优化代码性能。 1. **冒泡排序**: 冒泡排序是最基础的...

    数据结构各种排序算法

    冒泡排序是最基础也是最容易理解的一种排序算法。它的基本思想是通过重复遍历待排序的序列,每次比较相邻两个元素并将它们按顺序调整位置,直到整个序列排序完成。 **算法步骤**: - 从第一个元素开始,比较相邻两...

    排序算法——选择排序.docx

    选择排序是一种简单直观的排序算法,它的工作原理可以分为以下几个步骤: 1. **理解选择排序**:选择排序从数组的第一个元素开始,遍历数组寻找当前未排序部分的最小(或最大)元素。找到后,将这个最小(或最大)...

    算法小结 个人总结

    本篇文档旨在总结几种基本的数据结构与算法概念,包括但不限于队列、链表、堆栈、图和树等。这些数据结构和算法是软件开发人员必须掌握的基础技能之一。 ### 二、数据结构详解 #### 1. 队列(Queue) 队列是一种...

    C#常见算法面试题小结

    这里我们将深入探讨几种常见的排序算法,如冒泡排序、选择排序和插入排序,并分析一个递归求斐波那契数列的问题,以及模拟事件处理的简单设计模式。 首先,让我们来看冒泡排序。冒泡排序是一种简单的排序算法,它...

    python 排序算法总结及实例详解

    以上是Python中常见的四种排序算法:归并排序、插入排序、交换元素的技巧以及选择排序的介绍和实现。每种算法都有其适用的场景,了解它们的工作原理和性能特点对于优化代码和解决问题至关重要。在实际编程中,根据...

    南邮 数据结构 实验四 各排序方法时间测试

    通过系统时钟测量每种排序算法的执行时间,我们可以观察到它们在处理大量数据时的性能差异。这样的实践有助于我们理解每种算法的优缺点,为实际问题选择合适的排序算法。 实验结果的分析可能包括绘制图表,展示每种...

    Java软件开发实战 Java基础与案例开发详解 4-4 排序算法 共13页.pdf

    以上四种排序算法都是学习和了解排序概念的基础。它们各有优缺点,在不同的应用场景下有着不同的表现。在实际开发过程中,根据具体需求选择合适的排序算法是非常重要的。例如,对于小规模数据集,插入排序可能更高效...

    用C语言实现成绩表的快速排序程序设计

    6. 小结与体会:总结设计过程中的收获和体验,以及对快速排序算法的理解。 【时间安排】 根据课程设计的时间表,学生需要在规定时间内完成资料查阅、程序编写、调试和报告撰写等工作。 【关键字】 本设计涉及到...

    C/C++常用算法手册.秦姣华(有详细书签).rar

    2.1.5 数据结构的几种存储方式 18 2.1.6 数据类型 19 2.1.7 常用的数据结构 20 2.1.8 选择合适的数据结构解决实际问题 21 2.2 线性表 21 2.2.1 什么是线性表 21 2.2.2 线性表的基本运算 22 2.3 顺序表结构 ...

    算法引论:一种创造性方法.[美]Udi Manber(带详细书签).pdf

    6.2 二叉搜索的几种形式 6.2.1 纯二叉搜索 6.2.2 循环序列的二叉搜索 6.2.3 二叉搜索特殊下标 6.2.4 二叉搜索长度未知的序列 6.2.5 重叠子序列问题 6.2.6 解方程 6.3 内插搜索 6.4 排序 6.4.1 桶排序和...

Global site tag (gtag.js) - Google Analytics