//冒泡排序
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中常见的四种排序算法:冒泡排序、插入排序、快速排序和希尔排序。这些算法各有特点,适用于不同的场景,理解它们的工作原理有助于优化代码性能。 1. **冒泡排序**: 冒泡排序是最基础的...
冒泡排序是最基础也是最容易理解的一种排序算法。它的基本思想是通过重复遍历待排序的序列,每次比较相邻两个元素并将它们按顺序调整位置,直到整个序列排序完成。 **算法步骤**: - 从第一个元素开始,比较相邻两...
选择排序是一种简单直观的排序算法,它的工作原理可以分为以下几个步骤: 1. **理解选择排序**:选择排序从数组的第一个元素开始,遍历数组寻找当前未排序部分的最小(或最大)元素。找到后,将这个最小(或最大)...
本篇文档旨在总结几种基本的数据结构与算法概念,包括但不限于队列、链表、堆栈、图和树等。这些数据结构和算法是软件开发人员必须掌握的基础技能之一。 ### 二、数据结构详解 #### 1. 队列(Queue) 队列是一种...
这里我们将深入探讨几种常见的排序算法,如冒泡排序、选择排序和插入排序,并分析一个递归求斐波那契数列的问题,以及模拟事件处理的简单设计模式。 首先,让我们来看冒泡排序。冒泡排序是一种简单的排序算法,它...
以上是Python中常见的四种排序算法:归并排序、插入排序、交换元素的技巧以及选择排序的介绍和实现。每种算法都有其适用的场景,了解它们的工作原理和性能特点对于优化代码和解决问题至关重要。在实际编程中,根据...
通过系统时钟测量每种排序算法的执行时间,我们可以观察到它们在处理大量数据时的性能差异。这样的实践有助于我们理解每种算法的优缺点,为实际问题选择合适的排序算法。 实验结果的分析可能包括绘制图表,展示每种...
以上四种排序算法都是学习和了解排序概念的基础。它们各有优缺点,在不同的应用场景下有着不同的表现。在实际开发过程中,根据具体需求选择合适的排序算法是非常重要的。例如,对于小规模数据集,插入排序可能更高效...
6. 小结与体会:总结设计过程中的收获和体验,以及对快速排序算法的理解。 【时间安排】 根据课程设计的时间表,学生需要在规定时间内完成资料查阅、程序编写、调试和报告撰写等工作。 【关键字】 本设计涉及到...
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 顺序表结构 ...
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 桶排序和...