数据结构排序算法Java实现

闲的无聊又拿起了大学的数据结构的书看起来 《数据结构(c语言版)》严蔚敏 吴伟民编著。

里面有几个排序算法,感觉挺好玩的,就想着写出来玩玩。

package test.sort;
/**
 * @Title: TODO
 * @Description: TODO
 * @author:
 * @date: 2014-8-10 上午11:20:43
 *
 */
public class quickSort {

	private static int datas[] = {23,42,12,45,56,63,24,41,32};

	/**
	 * @Title: main
	 * @Description: TODO
	 * @param @param args
	 * @return void    返回类型
	 * @author
	 * @time 2014-8-10 上午11:20:43
	 * @throws
	 */
	public static void main(String[] args) {
//		bubbleSort();
//		quickSort(datas, 0, datas.length-1);
//		selectSort(datas);
		heapSort(datas);
		for(int data : datas) {
			System.out.print(data + "  ");
		}

	}

	//冒泡排序
	public static void bubbleSort() {
		for(int i = 0; i < datas.length-1; i++) {
			for(int j = i+1; j < datas.length; j++) {
				int num = 0;
				if(datas[i] > datas[j]) {
					num = datas[i];
					datas[i] = datas[j];
					datas[j] = num;
				}
			}
		}
	}

	public static int partition(int datas[] , int low , int high) {
		int pivotkey = datas[low];
		while (low < high ) {
			while(low < high && datas[high] >= pivotkey)
				high--;
			datas[low] = datas[high];
			while (low < high && datas[low] <= pivotkey) {
				low++;
			}
			datas[high] = datas[low];
		}
		datas[low] = pivotkey;
		return low;
	}

	//快速排序算法
	public static void quickSort(int datas[] , int low , int high) {
		if(low < high) {
			int pivotloc = partition(datas, low, high);
			quickSort(datas, low, pivotloc-1);
			quickSort(datas, pivotloc+1, high);
		}
	}

	//选择排序
	public static void selectSort(int datas[]) {
		for(int i = 0; i < datas.length -1; i++) {
			int j = selectMinKey(datas,i);
			if(i != j) {
				int num = datas[i];
				datas[i] = datas[j];
				datas[j] = num;
			}
		}
	}
	      //找出数组中最小的值所在的位置
	public static int selectMinKey(int datas[],int i) {
		int minIndex = i;
		int minData = datas[i];
		for (int j = i+1; j < datas.length; j++) {
			if (minData > datas[j]) {
				minIndex = j;
				minData = datas[j];
			}
		}
		return minIndex;
	}
         //从第s个元素为根节点组成一个堆,也就是筛选
	public static void heapAdjust(int datas[] ,int s, int m) {
		int rc = datas[s];
		for (int i = 2*s+1; i < m; i*=2) {
			if(i < m-1 && datas[i] < datas[i+1])
				i++;
			if (rc >= datas[i]) {
				break;
			}
			datas[s] = datas[i];
			s = i;
		}
		datas[s] = rc;
	}
         //堆排序
	public static void heapSort(int datas[]) {
		for(int i = datas.length/2-1; i >= 0 ; i--)
			heapAdjust(datas, i, datas.length);
		for(int j = datas.length - 1; j > 0; j--) {
			int num = datas[0];
			datas[0] = datas[j];
			datas[j] = num;
			heapAdjust(datas, 0, j);
		}
	}
}

数据结构排序算法Java实现

时间: 2024-10-27 05:24:42

数据结构排序算法Java实现的相关文章

黑马程序员——数据结构排序算法总结

-----------android培训.java培训.java学习型技术博客.期待与您交流!------------ 下面是几个网上常见的总结图: 有些不同之处:集中在希尔排序的时间复杂度.快速归并的空间复杂度上 个人总结口诀: 选择N方-->选择排序的最好最坏平均都N方 插入冒泡最好N-->插入冒泡的最好是N,其他是N方 归并堆n乘logN-->归并希尔堆的最好最坏平均都是n乘logN 快速最坏N方-->快速排序的最坏是N方,其他是n乘logN 快速选择希尔堆不稳定-->

排序算法Java实现

排序算法Java实现 排序算法的分类: 内部排序,在排序过程中,全部记录放在内存中,称为内部排序: 外部排序,在排序过程中需要使用外部存储(磁盘),则称为外部排序. 主要介绍内部排序: 插入排序:直接插入排序.二分法插入排序.希尔排序 选择排序:简单选择排序.堆排序 交换排序:冒泡排序.快速排序 归并排序 基数排序 插入排序 直接插入排序 基本思想:对于给定的一组记录,初始时假设第一个记录自成一个有序序列,其余记录为无序序列.接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的

经典排序算法(Java实现)

以下程序均将数据封装于DataWrap数据包装类中,如下所示: 1 //数据包装类 2 class DataWrap implements Comparable<DataWrap> 3 { 4 int data; 5 String flag; 6 public DataWrap(int data,String flag) 7 { 8 this.data = data; 9 this.flag = flag; 10 } 11 //重写compareTo方法 12 public int compa

排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题

常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结束.时间复杂度:O(n^2) 选择排序:每次在无序队列中"选择"出最大值,放到有序队列的最后,并从无序队列中去除该值(具体实现略有区别).时间复杂度:O(n^2) 直接插入排序:始终定义第一个元素为有序的,将元素逐个插入到有序排列之中,其特点是要不断的 移动数据,空出一个适当的位置,把待插

九大排序算法Java实现

之前学习数据结构与算法时花了三天时间整理九大排序算法,并采用Java语言来实现,今天第一次写博客,刚好可以把这些东西从总结的文档中拿出来与大家分享一下,同时作为自己以后的备忘录. 1.排序算法时间复杂度.稳定性分类: 2.排序算法问题描述与实现 2.1冒泡排序(交换排序-稳定) [问题描述]对于一个int数组,请编写一个冒泡排序算法,对数组元素排序. 问题分析:冒泡排序,顾名思义,从前往后遍历,每次遍历在末尾固定一个最大值. 易错点:每次内层循环结束都会在末尾确定一个元素的位置,因此内层循环的判

Java排序算法-Java入门|Java基础课程

Java 排序算法 1. 课程目标 排序是任何语言都会使用到的功能之一,然成果排序的算法有很多,对空间的要求及其时间效率也不尽相同. 本文章以Java语言示例,通过对空间要求.时间效率要求,来对比各种排序算法的使用场景 2.适用对象 Java语言初学者 Java算法爱好者 3.相关概念 3.1 排序概念 排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作. 3.2 排序算法 排序算法,就是如何使得记录按照要求排列的方法. 排序算法在很多领域得到相当地重视,尤其是在

八大排序算法JAVA实现(时间复杂度O(n*logn)篇)

本文讲述时间复杂度为n*logn的排序算法:归并排序.快速排序.堆排序以及希尔排序的原理.Java实现以及变形应用. 一.归并排序 原理:把两个有序数列合并为一个有序数列.需递归实现. Java实现: 1 public int[] mergeSort(int[] a, int n) 2 { 3 return doMergeSort(a, n, 0, n - 1); 4 } 5 public int[] doMergeSort(int[] a, int n, int start, int end)

数据结构——排序算法总结

排序(Sorting)就是将一组对象依照规定的次序又一次排列的过程,排序往往是为检索而服务的.它是数据处理中一种非常重要也非经常常使用的运算.比如我们日常学习中的查字典或者书籍的文件夹.这些都事先为我们排好序,因此大大减少了我们的检索时间,提高工作效率. 排序可分为两大类: 内部排序(Internal Sorting):待排序的记录所有存放在计算机内存中进行的排序过程: 外部排序(External Sorting):待排序的记录数量非常大,内存不能存储所有记录.须要对外存进行訪问的排序过程. 外

八大排序算法Java(转)

目录(?)[-] 概述 插入排序直接插入排序Straight Insertion Sort 插入排序希尔排序Shells Sort 选择排序简单选择排序Simple Selection Sort 选择排序堆排序Heap Sort 交换排序冒泡排序Bubble Sort 交换排序快速排序Quick Sort 归并排序Merge Sort 桶排序基数排序Radix Sort 总结 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序