插入排序
选择排序
快速排序
。。。。
后续补充
package org.jf.alg.sort;
/**
*
* 数组排序工具类
*
* 数组中不能有空元素
*
* @author junfeng.chen
*
*/
public class Sorter {
/**
*
* 选择排序
* 算法思想:将待排序的集合分为两部分,一部分为已排序的部分,一部分为未排序部分
* 开始时,未排序部分为整个集合,已排序部分为空
* 算法步骤:
* 每次从待排序的集合中找出最大(或最小)的元素,将该元素与集合中第一个元素交换;此时该
* 元素及以前的元素都为排好序的
*
* i<-- [0 - size-1]
* j<-- [i+1 - size-1]//未排好序的元素 i-size-1
* find min from [i+1 - size - 1]
*
* exchange min and a[i]
*
* O(n2)
* @param objs
*/
public static void selectSort(Comparable [] objs)
{
if(objs==null || objs.length<=1)
return;
for(int i=0;i<objs.length-1;i++)
{
Comparable little = objs[i];
int little_indx = i;
for(int j=i+1;j<=objs.length-1;j++)
{
if(objs[j].compareTo(little)<0)
{
little = objs[j];
little_indx = j;
}
}
if(little_indx != i)
{
Comparable tmp = objs[i];
objs[i] = objs[little_indx];
objs[little_indx] = tmp;
}
}
}
/**
*
* 将数组分成两部分,一部分为已排序不分,另一部分未排序
* 开始时,已排序不分为空集合;未排序不分为整个数组
* 每次取未排序部分的第一个元素,插入到已排序部分的适当位置
*
*
* 插入排序
* @param objs
*/
public static void insertSort(Comparable objs[])
{
for(int i=0;i<objs.length;i++)
{
Comparable max = objs[i];
for(int j=0;j<i;j++)
{
if(objs[j].compareTo(max)>0)//找到位置
{
for(int k = i;k>j;k--)//后面的元素 依次后移
{
objs[k] = objs[k - 1];
}
objs[j]=max;
break;
}
}
}
}
/**
*
*取首元素作为基准
* @param objs
* @param start
* @param end
*/
public static int partition(Comparable objs[],int start,int end)
{
Comparable pivot = objs[start];
int left = start;
int right = end;
while(left < right)
{
while(pivot.compareTo(objs[right])<0)
right --;
while(left < right &&
pivot.compareTo(objs[left])>=0)
{
left ++ ;
}
if(left < right)
{
Comparable tmp = objs[left];
objs[left] = objs[right];
objs[right] = tmp;
}
}
int pos = right;
objs [start] = objs[pos];
objs [pos] = pivot;
return pos;
}
/**
* 三数取中 作为基准
* @param objs
* @param start
* @param end
* @return
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public static int partition2(Comparable objs[],int start,int end)
{
int left = start;
int right = end;
int mid_indx = (left+right)/2;
Comparable mid = objs[(left+right)/2];
if(objs[left].compareTo(mid)<0)
{
if(mid.compareTo(objs[right])<=0)
mid_indx =mid_indx ;//pivot = mid;
else
{
if( objs[left].compareTo(objs[right])>0)
mid_indx = left;//pivot = objs[left];
else
mid_indx = right;//pivot = objs[right];
}
}else
{
if(mid.compareTo(objs[right])>=0)
mid_indx = mid_indx;//pivot = mid;
else
{
if(objs[left].compareTo(objs[right])>=0)
mid_indx = right;//pivot = objs[right];
else
mid_indx = left;//pivot = objs[left];
}
}
Comparable tp = objs[start];
objs[start] = objs[mid_indx];
objs[mid_indx] = tp;
Comparable pivot = objs[start];
while(left < right)
{
while(pivot.compareTo(objs[right])<0)
right --;
while(left < right &&
pivot.compareTo(objs[left])>=0)
{
left ++ ;
}
if(left < right)
{
Comparable tmp = objs[left];
objs[left] = objs[right];
objs[right] = tmp;
}
}
int pos = right;
objs [start] = objs[pos];
objs [pos] = pivot;
return pos;
}
public static void quickSort(Comparable objs[],int start,int end)
{
if(start >= end)
return;
int pos = partition2(objs,start,end);
quickSort(objs,start,pos -1);
quickSort(objs,pos+1,end);
}
/**
* 快速排序
* 采用3位取中法 定基准
* @param objs
*/
public static void quickSort(Comparable objs[])
{
quickSort(objs,0,objs.length-1);
}
}
分享到:
相关推荐
本文将详细介绍七种基本排序算法,包括插入排序、快速排序、希尔排序、归并排序、选择排序、冒泡排序(以及双向冒泡排序)和堆排序,这些都是用C语言实现的。对于初学者来说,理解和掌握这些算法有助于提升编程技能...
根据提供的信息,我们可以总结出以下关于八种基本排序算法中的两种——冒泡排序(Bubble Sort)与插入排序(Insert Sort)的知识点。 ### 冒泡排序(Bubble Sort) #### 定义 冒泡排序是一种简单的排序算法。它...
本文将详细探讨C#语言中实现的几种基本排序算法,包括冒泡排序、鸡尾酒排序(双向冒泡)、选择排序、插入排序、希尔排序、堆排序和归并排序。 首先,我们来看**冒泡排序**,它是最简单的排序算法之一。通过不断交换...
本文档是一个关于基本排序算法的综合实验报告,包括实验条件、源程序代码、算法实现等内容。下面我们将对实验报告中涉及的知识点进行详细的解释和分析。 一、实验条件 实验条件是指进行排序算法实验的硬件和软件...
【五大基本排序算法详解】 排序算法是计算机科学中不可或缺的一部分,它们用于整理和组织数据,使其按照特定的顺序排列。本文将详细介绍五大基本排序算法,包括选择排序、冒泡排序和快速排序,这些都是数据结构和...
本文将深入探讨在C语言中实现的几种基本排序算法,包括冒泡排序、插入排序、选择排序、快速排序、希尔排序以及归并排序。这些算法各有优劣,适用于不同的场景。 1. 冒泡排序(Bubble Sort) 冒泡排序是一种简单的...
以下是标题"java实现的八种基本排序算法(有注释)"所涵盖的八种排序算法的详细说明: 1. **冒泡排序(Bubble Sort)**: 冒泡排序是一种简单的交换排序,通过不断比较相邻元素并交换位置,使最大或最小的元素逐渐...
本资源“基本排序算法C语言实现”提供了一系列经典的排序算法的C语言实现,帮助开发者深入理解这些算法的工作原理并能实际运用到项目中。 1. **冒泡排序**: 冒泡排序是一种简单的排序算法,它重复地遍历要排序的...
本实验旨在通过实践操作,帮助学生深入理解并比较各种基本排序算法的性能和特点。 【排序算法种类】 1. 直接插入排序:直接插入排序是一种简单的排序方法,分为有监视哨和无监视哨两种。监视哨用于避免不必要的...
几种基本排序算法的运行时间比较 /* *Copyright dongbo *All rights reserved. * *文件名称: 基本排序实现 *功 要: 实现 直接插入排序;简单排序 ;冒泡排序 ;快速排序 及所用时间比较 * *当前版本: 1.0 */
本教程“MFC基于C++语言的三种基本排序算法的动态演示”着重介绍了如何在MFC环境下实现并可视化三种经典的排序算法:冒泡排序、插入排序和选择排序。 **冒泡排序**是一种简单的排序算法,通过重复遍历待排序的序列...
这里我们将深入探讨标题所提及的基本排序算法,以及描述中提到的包含实现源码的资源。 1. 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法,通过重复遍历待排序的序列,比较相邻元素并根据需要交换它们的...
sorting_algorithms_py, 在 python 中,基本排序算法 简单 sorting_algorithms_py用 python 编写的基本排序算法。 代码简单易于理解。平均复杂度 !查看常见排序算法的平均 Big-O 复杂度:快速排序:O ( n log(n) )...
包括_基础数据结构leetcode基本搜索算法基本排序算法Java8_stream_java_basic
基本排序算法实现(冒泡,插入排序,快排,希尔排序,堆排序,计数排序,等等)_SortCode
本文主要介绍了四种基本的排序算法:冒泡排序、简单选择排序、插入排序以及希尔排序。 1. 冒泡排序: 冒泡排序是一种简单的排序算法,其核心思想是通过重复遍历待排序的数列,比较相邻的两个元素并根据需要交换它们...
最新10.1几种基本排序算法的实现.pdf
基于 matplotlib 实现的基本排序算法的动态可视化项目源码,通过 pyaudio 增加音效,冒泡、选择、插入、快速等排序 排序算法 具体排序算法的代码实现见 sortx.py 几乎所有的数据结构与算法相关书籍都对排序方法有...
在IT领域,排序算法是计算机科学中的基础概念,尤其在编程语言如C++中,掌握各种排序算法对于提升程序效率至关重要。本篇文章将详细讲解四种排序算法:冒泡排序、插入排序、选择排序以及一种更高级的排序算法。 ...
算法可视化--数据结构课程设计。目前支持了其中基本排序算法以及迪杰斯特拉算法可视化,欢迎学弟学妹Fo_algorithmVisualize