`

数据结构--排序

阅读更多
转自:http://student.zjzk.cn/course_ware/data_structure/web/paixu/paixu8.6.2.htm

顺便贴出两个排序:快速排序,插入排序代码



快速排序:
package org.hwq.util;
public class QuickSort{
	public static int part(int[] arr,int low,int heigh){
		int temp = arr[low];
		while(low<heigh){
			while(low<heigh&&arr[heigh]>temp)
				heigh--;
			if(low<heigh)
				arr[low++] = arr[heigh];
			
			while(low<heigh&&arr[low]<temp)
				low++;
			if(low<heigh)
				arr[heigh--] = arr[low];
		}
		arr[low] = temp;
		return low;
	}
	public static void quicksort(int[]arr,int low,int heigh){
		int p ;
		if(low<heigh){
			p = part(arr,low,heigh);
			quicksort(arr,low,p-1);
			quicksort(arr,p+1,heigh);
		}
	}
	public static void quicksort(int[] arr){
		quicksort(arr,0,arr.length-1);
	}
	public static void main(String[] args) {
		int[] arr = new int[]{3,2,1,55,6,6,6,6};
		quicksort(arr);
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+",");
		}
	}
}




插入排序:
package org.hwq.util;

public class InsertSort {
	public static void insertsort(int[] a){
		int t,j;
		for(int i=1;i<a.length;i++){
			t = a[i];
			for(j=i-1;j>=0;j--){
				if(t<a[j]){
					a[j+1] = a[j];
				}else{
					break;
				}
			}
			a[j+1] = t;
		}
	}
/**
	 * 插入排序的递归调用
	 * @param a
	 * @param i
	 */
	public static void recursionInsertion(int[] a,int i){
		if(i == 0){
			return;
		}
		recursionInsertion(a,i-1);
		insert(a,i);
	}
	
	public static void insert(int[] a,int i){
		int key = a[i];
		int j = i-1;
		for(;j>=0;j--){
			if(key<a[j]){
				a[j+1] = a[j];
			}else{
				break;
			}
		}
		a[j+1] = key;
	}

	public static void main(String[] args) {
		int[] arr = new int[]{2,1,5,6,3,8,8,8,4};
		insertsort(arr);
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+";");
		}
	}
}

堆排序:
public class Heap {
	public static void heapAdjust(int[] a,int start,int length){
		int temp = a[start];
		int child;
		int i;
		for(i = start; i * 2 + 1 < length; i = child){
			child = i * 2 + 1;
			if(child!=length-1&&a[child+1]>a[child])
				++child;
			if(temp<a[child]){
				a[i] = a[child];
			}else{
				break;
			}
		}
		a[i] = temp;
	}
	public static void heapSort(int[] a){
		for(int i=a.length/2-1;i>=0;i--){
			heapAdjust(a,i,a.length);
		}
		for(int i = a.length-1;i>0;i--){
			swap(a,0,i);
			heapAdjust(a,0,i);
		}
	}
	public static void swap(int[] a,int i,int j){
		a[i]^=a[j];
		a[j]^=a[i];
		a[i]^=a[j];
	}
	public static void main(String[] args) {
		int[] a = {42,13,24,91,23,16,05,88,88,8,91,88,88};
		System.out.println(Arrays.toString(a));
		heapSort(a);
		System.out.println(Arrays.toString(a));
	}
}


希尔排序:
public class ShellRe {
	/**
	 * 希尔排序,每次改变一个增量,直到增量increment=1,变为直接插入排序
	 * @param a
	 */
	public static void shellSort(int[] a){
		for(int k=a.length/2;k>0;k/=2){
			insertion(a,k);
		}
	}
	/**
	 * 直接插入排序
	 * @param a
	 */
	public static void insertion(int[] a){
		for(int i=1;i<a.length;i++){
			int temp = a[i];
			int j;
			for(j=i-1;j>=0;j--){
				if(temp<a[j]){
					a[j+1] = a[j];
				}else{
					break;
				}
			}
			a[j+1] = temp;
		}
	}
	/**
	 * 加入增量的插入排序
	 * 如果increment=1,则演变为直接插入排序
	 * @param a
	 * @param increment
	 */
	public static void insertion(int[] a,int increment){
		for(int i=increment;i<a.length;i+=increment){
			int temp = a[i];
			int j;
			for(j=i-increment;j>=0;j-=increment){
				if(temp<a[j]){
					a[j+increment] = a[j];
				}else{
					break;
				}
			}
			a[j+increment] = temp;
		}
	}
	public static void main(String[] args) {
		int[] a = {42,13,24,91,23,16,05,88,88,8,91,88,88};
		System.out.println(Arrays.toString(a));
//		insertion(a,1);
		shellSort(a);
		System.out.println(Arrays.toString(a));
	}
}
分享到:
评论

相关推荐

    数据结构--排序--思维导图.pdf

    "数据结构--排序--思维导图" 数据结构中排序是指将一组无序的记录序列按照一定的规则排列成有序的序列,排序的目的是为了提高数据的存储和检索效率。排序算法的稳定性是指在排序过程中,如果待排序表中有两个元素Ri...

    数据结构--排序 很细致

    数据结构中的排序是计算机科学中一个基础且重要的概念,它涉及到如何有效地组织和处理大量数据。排序算法的主要目标是将一组无序的数据元素按照特定的标准(通常是升序或降序)排列成一个有序序列。本篇文章主要介绍...

    数据结构--快速排序C++源代码

    数据结构--快速排序C++源代码,自己编写调试,代码简单易懂,不长

    数据结构-排序课件

    数据结构-排序课件,严蔚敏课本课件,比较好用

    图解数据结构--使用Java

    利用大量且丰富的图示与范例, 详解复杂的抽象理论,从最基本的数据结构概念开始 说明,再以Java工具加以诠释阵列结构、堆栈、链表 、队列、排序、查找等重要的概念,引领读者抓住重 点轻松进入数据结构的学习领域

    数据结构-----排序

    计算机专业 上机报告 数据结构上机报告-----排序

    数据结构- C语言 -排序.md

    数据结构- C语言 -排序.md

    数据结构---二叉排序树.doc

    数据结构---二叉排序树.doc

    数据结构--课程设计(多种排序算法 有界面)

    数据结构 课程设计 多种排序算法 有界面 数据结构 课程设计 多种排序算法 有界面 数据结构 课程设计 多种排序算法 有界面 数据结构 课程设计 多种排序算法 有界面 数据结构 课程设计 多种排序算法 有界面

    数据结构-排序.pdf

    数据结构-排序.pdf

    数据结构-排序算法的实现(代码+报告)

    ### 数据结构-排序算法的实现知识点详解 #### 实验背景及目标 本次实验的主要目的是让学生深入理解并掌握几种常见的排序算法及其应用场景。通过动手实践,不仅能够加深对各种排序算法工作原理的理解,还能够培养...

    数据结构实验——排序

    一、实验目的 1、掌握排序的不同方法,并能用高级语言实现排序算法 二、实验内容 1、实现希尔排序算法。

    数据结构--九种排序算法 --排序001.cpp

    此文件为数据结构中的九种排序算法,包含一些排序方法的过程,其九种排序包括:直接插入排序,折半插入排序,希尔排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,基数排序!

    湖南大学-数据结构-期末试题【2016-2019】.zip

    数据结构是计算机科学中的核心课程,它探讨了如何在计算机中高效地组织和管理数据,以便于进行各种操作。湖南大学的数据结构期末试题涵盖了这门课程的重要概念和技术,旨在检验学生对这些知识的理解和应用能力。以下...

    数据结构-用C语言描述

    数据结构-用C语言描述,介绍了各种常用的数据结构以及排序、查找的各种算法。阐述了各种数据结构的逻辑关系、存储表示及运算操作,并对c语言描述的算法作了详细的注解和简要的性能分析 www.gouyue.net 勾月科技

    数据结构-归并排序

    数据结构-归并排序 PPT文档

    数据结构-排序(包括常用的插入排序,选择排序,冒泡排序等)

    数据结构-排序(包括常用的插入排序,选择排序,冒泡排序等)

    数据结构思维导图-排序.pdf

    以上是数据结构中关于排序的一些基本知识,包括排序的稳定性、比较次数、内部排序和外部排序的定义,以及直接插入排序、折半插入排序、希尔排序和冒泡排序的原理和特点。这些排序算法各有优缺点,选择哪种排序算法取...

    数据结构---二叉排序树

    数据结构实验程序---二叉排序树的生成。该课题是用来描述二叉排序树的,给定一列整型的数据(无序),按照二叉排序树的思想将该列数据排成一个有序的序列(通过中序遍历该二叉树可以得到一个非递减有序序列)。通过...

Global site tag (gtag.js) - Google Analytics