`
prowl
  • 浏览: 80668 次
  • 性别: Icon_minigender_1
  • 来自: 艾泽拉斯
社区版块
存档分类
最新评论

三个排序

    博客分类:
  • j2se
J# 
阅读更多
package org.edisonyoung.commons.datastructure;

import java.util.Comparator;

/**
 * @author edison
 * @date 2009-11-2
 */
public class SortUtils {
	
	/**
	 * 选择排序
	 */
	public static void sortBySelection(int[] array,int off,int len){
		for(int i=off;i<len-1;i++){
			int min=i;
			for(int j=i+1;j<len;j++){
				if(array[min]>array[j])
					min=j;
			}
			swap(array,min,i);
		}
	}
	/**
	 * 冒泡排序
	 */
	public static void sortByBubble(int[] array,int off,int len){
		for(int i=off;i<len;i++){
			for(int j=off;j<len-i-1;j++){
				if(array[j+1]<array[j]){
					swap(array,j+1,j);
				}
			}
		}
	}
	
	/**
	 * 插入排序(Insertion Sort 对象数组)
	 */
	public static <T> void sortByInsertion1(T[] t,Comparator<? super T> comp){
		for(int i=0;i<t.length;i++)
			for(int j=i;j>0&&comp.compare(t[j-1], t[j])==1;j--)
				swap(t,j,j-1);
	}
	
	/**
	 * 插入排序(Insertion Sort Core)
	 */
	public static void sortByInsertion(int[] array,int off,int len){
		for(int i=off+1;i<len;i++){
			int sign=array[i];
			int j=0;
			for(j=i-1;j>=off&&array[j]>sign;j--){
				array[j+1]=array[j];
			}
			array[j+1]=sign;
		}
	}
	
	private static <T> void swap(T[] t,int i,int j){
		T sign=t[i];
		t[i]=t[j];
		t[j]=sign;
	}
	
	private static void swap(int[] t,int i,int j){
		int sign=t[i];
		t[i]=t[j];
		t[j]=sign;
	}
	
	public static void main(String[] args){
		int[] array={5,6,3,1,7,2,4};
		
		//sortByInsertion(array,0,array.length);
		//sortByBubble(array,0,array.length);
		sortBySelection(array,0,array.length);
		
		for(int element:array){
			System.out.print(element+",");
		}
		
//		Person p1=new Person(4);
//		Person p2=new Person(1);
//		Person p3=new Person(3);
//		Person p4=new Person(2);
//		
//		Person[] pArray={p1,p2,p3,p4};
//		
//		Arrays.asList(pArray);
//		
//		sortByInsertion1(pArray,new Comparator<Person>(){
//
//			@Override
//			public int compare(Person p1, Person p2) {
//				return p1.getAge()<p2.getAge()?0:1;
//			}
//			
//		});
//		
//		for(Person p:pArray){
//			System.out.print(p.getAge()+",");
//		}
		
	}
}

分享到:
评论

相关推荐

    三个排序问题的实现(桶排,合并,随机快排)

    本文将详细讨论三种排序算法的实现:桶排序、合并排序和随机快速排序。这些算法都是C语言实现的,旨在帮助程序员理解和应用这些方法来解决实际问题。 1. 桶排序(Bucket Sort) 桶排序是一种分布式排序算法,适用...

    VB中三种排序方法

    在小组作业中,你们可能需要编写这三个排序算法的VB代码,并对它们进行性能测试,以比较不同排序方法在不同数据集上的效率。这不仅能提升编程技能,还能帮助理解各种排序算法的优缺点。记得在实现时加入适当的错误...

    c++ 选择排序 插入排序 快速排序

    接下来,我们将详细探讨这三个排序算法。 1. **选择排序(Selection Sort)** 选择排序是一种简单直观的排序算法。它的基本思想是在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再从剩余...

    快速排序、归并排序、堆排序 并比较排序时间

    这篇文章将详细探讨这三个排序算法,并对比它们的时间复杂度。 首先,我们来看快速排序。快速排序由C.A.R. Hoare在1960年提出,它的核心思想是分治法。通过选取一个基准元素,将数组分为两部分,一部分的所有元素都...

    排序问题(选择法排序, 冒泡法排序, 合并法排序),VB6.0源代码编写

    文件"VB090610-排序问题(选择法排序, 冒泡法排序, 合并法排序)"应该包含了这三个排序算法的详细代码示例,可以帮助读者理解和学习如何在VB6.0中实现这些经典的排序方法。通过学习和实践这些代码,可以加深对排序算法...

    VB 三个数的排序

    在VB(Visual Basic)编程语言中,对三个数进行排序是一项基本操作,它涉及到数组、条件判断和逻辑控制。在本篇文章中,我们将深入探讨如何使用VB实现对三个数的升序排序,以及背后的原理。 首先,理解排序的含义...

    经典排序算法源代码-插入排序-选择排序-冒泡排序

    下面将详细介绍这三个排序算法的工作原理、特点以及代码实现。 1. **插入排序(Insertion Sort)** - 插入排序是一种简单直观的排序算法,它的工作原理类似于我们日常整理扑克牌的过程。初始时,数组可以看作是未...

    算法与分析实验3: 利用预排序、堆排序和计数排序解决排序问题

    通过对这三个排序算法的学习和实践,学生可以深入理解不同的排序策略和它们的性能特性。预排序适合处理需要判断元素唯一性的场景;堆排序虽然在最坏情况下时间复杂度较高,但仍是原地排序算法,适用于内存受限的情况...

    利用三个排序来排列十个无序数字

    大学生

    实验4-插入排序、快速排序、选择排序.rar_C语言_北京理工大学_插入排序实验_数据结构

    在"实验4-插入排序、快速排序、选择排序.cpp"这个文件中,我们可以期待看到C++实现的这三个排序算法的源代码。学习和理解这些代码可以帮助我们更好地掌握排序算法的实现细节,同时也能提高编程能力。在实际编程中,...

    快速排序,归并排序,插入排序

    以下是对这三个排序算法的详细介绍: ### 快速排序 快速排序由C.A.R. Hoare在1960年提出,其核心思想是分治法。它通过选取一个基准元素,将数组分为两部分,一部分的所有元素都比基准小,另一部分的所有元素都比...

    快速排序归并排序简单排序算法比较

    自己写的三个排序算法的比较。快速排序、归并排序、简单排序 对三个排序算法所消耗时间进行统计,比较时间效率 程序是在Linux下用C写的,vc下并未做测试。

    Java三种排序 Java三种排序

    这里我们将探讨三种基本的排序算法:冒泡排序、选择排序和插入排序。这些算法都是基于数组的简单排序方法,适合理解排序的基本原理。 首先,我们来看冒泡排序。冒泡排序是一种交换排序,其核心思想是通过反复遍历待...

    3个数从小到大排序

    本文将通过一个具体的示例——使用C语言对三个整数进行从小到大的排序,来深入解析排序的基本概念、实现方法以及代码细节。 #### 排序算法简介 排序算法是指一种能够将一串记录按照关键字的大小顺序排列的方法。...

    c三大排序c三大排序c三大排序c三大排序c三大排序c三大排序c三大排序c三大排序c三大排序 vs2013的cpp

    c三大排序c三大排序c三大排序c三大排序c三大排序摘要必须大于100个字节!摘要必须大于100个字节!摘要必须大于100个字节!摘要必须大于100个字节!摘要必须大于100个字节!

    直接插入排序法、冒泡排序法、直接选择排序法算法

    例如,文件"06_091.cpp"很可能包含了这三个排序算法的C语言实现。在实际编程中,开发者可能会定义一个包含排序函数的结构体,如`struct SortMethods { void (*fun1)(int*); void (*fun2)(int*); void (*fun3)(int*);...

    对三个数进行排序C++

    对三个数的排序进行了编译,通过对min,max,mid进行的定义进行整体的排序思路,编写代码。

    冒泡等排序

    此外,`Print`方法用于打印排序后的数组,`main`方法则是程序的入口,接收用户输入的五个整数,然后分别调用这三个排序算法对数组进行排序,并打印排序结果。这里还包含了一个简单的输入验证机制,确保用户输入的是...

    直接插入排序、冒泡排序、快速排序—于—实验七.doc

    在实验中,这三个排序算法被应用于一个特定的整数数组,并打印了每种排序后的结果。实验不仅要求掌握排序算法的实现,还强调了在遇到实际问题时选择适当排序方法的能力。通过实验,学生不仅能深入理解排序算法的运作...

    三路归并_C语言_三路归并排序_三路归并_

    三路归并排序的核心是将一个大数组分为三个较小的子数组,分别对这三个子数组进行排序,然后将排序后的子数组合并成一个有序的大数组。这种方法可以有效地处理具有大量重复元素的情况,因为它避免了在合并过程中不必...

Global site tag (gtag.js) - Google Analytics