package datastructure; import java.util.Arrays; // sort from small to big public class Sort { // 选择排序 public void selectionSort(int[] array) { int length = array.length; int tempValue = 0; int tempIndex = 0; for (int i = 0; i < length - 1; i++) { tempValue = array[i]; tempIndex = i; for (int j = i; j < length; j++) { if (array[j] < tempValue) { tempValue = array[j]; tempIndex = j; } } array[tempIndex] = array[i]; array[i] = tempValue; } } // 插入排序 public void insertSort(int[] array) { int tempValue = 0; int length = array.length; for (int i = 1; i < length; i++) { for (int j = 0; j < i; j++) { if (array[i] < array[j]) { tempValue = array[i]; for (int k = i; k > j; k--) { array[k] = array[k - 1]; } array[j] = tempValue; } } } } // 冒泡排序 public void bubbleSort(int[] array) { int length = array.length; int tempValue = 0; for (int i = 0; i < length - 1; i++) { for (int j = 0; j < length - i - 1; j++) { if (array[j] > array[j + 1]) { tempValue = array[j]; array[j] = array[j + 1]; array[j + 1] = tempValue; } } } } // 归并排序 public int[] mergeSort(int[] arrs) { if(arrs.length < 2){ return arrs; } int middle = arrs.length % 2 == 0 ? arrs.length / 2 : (arrs.length - 1) / 2; int[] left = Arrays.copyOfRange(arrs, 0, middle); int[] right = Arrays.copyOfRange(arrs, middle, arrs.length); int[] lres = mergeSort(left); int[] rres = mergeSort(right); return merge(lres, rres); } private int[] merge(int[] lres, int[] rres) { int[] res = new int[lres.length + rres.length]; int l = 0; int r = 0; int c = 0; while(l < lres.length && r < rres.length){ if(lres[l] < rres[r]){ res[c++] = lres[l++]; } else { res[c++] = rres[r++]; } } if(l == lres.length){ while(r < rres.length){ res[c++] = rres[r++]; } return res; } if(r == rres.length){ while(l < lres.length){ res[c++] = lres[l++]; } return res; } return res; } // 快速排序 public void quickSort(int[] array, int i, int j) { if (i < j) { int start = i; int end = j; int partition = array[i]; while (i < j) { while (i<j && partition <= array[j]) { j--; } array[i] = array[j]; while(i<j && partition >= array[i]){ i++; } array[j] = array[i]; } array[i] = partition; this.quickSort(array, start, i-1); this.quickSort(array, i + 1, end); } } // 堆排序 public void heapSort(int[] array) { this.createHeap(array); int heapLength = array.length; for (int i=0;i<array.length;i++) { int temp = array[heapLength-1]; array[heapLength-1]=array[0] ; array[0] = temp; heapLength=heapLength-1; this.heapifyDown(array, 0, heapLength); } } private void createHeap(int[] array){ int length = array.length; for (int i=length/2-1; i>=0; i--) { this.heapifyDown(array, i, length); } } // 这里多加一个arraylen的设计,目的是 在 真正做 排序 首尾交换的时候 ,heap size是越来越小的。所以做heapifydown时,不应该考虑整个数组 private void heapifyDown(int[] array, int i, int arraylen){ //int length = array.length; int length = arraylen; if (2*i+2 > length) return; if (2*i+2 == length) { if(array[i] > array[length-1]){ int temp = array[i]; array[i] = array[length-1]; array[length-1] = temp; } } else { int compareIndex; if (array[2*i+1]<array[2*i+2]) compareIndex = 2*i+1; else compareIndex = 2*i+2; if(array[i] > array[compareIndex]) { int temp = array[i]; array[i] = array[compareIndex]; array[compareIndex] = temp; this.heapifyDown(array, compareIndex, length); } } } public void print(int[] array) { int len = array.length; for (int i = 0; i < len; i++) { System.out.print(array[i] + " "); } System.out.println(); } public static void main(String[] args) { int n = 10; int[] array = new int[n]; for (int i = 0; i < n; i++) { array[i] = (int) (Math.random() * 100); } Sort s = new Sort(); System.out.println("Before sorting:"); s.print(array); // s.selectionSort(array); // s.insertSort(array); // s.bubbleSort(array); //s.quickSort(array, 0, n - 1); //s.heapSort(array); s.print(s.mergeSort(array)); System.out.println("After sorting:"); s.print(array); } }
相关推荐
堆排序 java实现
快速排序 java实现
标题中的“DSAA_堆排序java实现_源码”表明这是一个关于数据结构与算法分析(Data Structures and Algorithms Analysis,简称DSAA)的资料包,主要关注堆排序算法的Java实现。堆排序是一种高效的排序算法,它利用了...
冒泡排序 Java 实现 冒泡排序是最简单的排序算法之一,它的工作原理是重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说...
Java实现归并排序 Java 实现归并排序是一种常用的排序算法,通过分治策略将原始数组分成小组,然后对每个小组进行排序,最后将排序好的小组合并成一个有序数组。下面是 Java 实现归并排序的知识点总结: 基本思想 ...
在编程领域,排序是至关重要的一个部分,尤其是在处理大量数据时。Java作为一种广泛使用的编程语言,提供了多种...在提供的压缩包文件"Demo_4"中,应该包含了具体的Java实现代码,你可以参考并学习这些示例来加深理解。
八大排序java实现源代码,有非常完整的注释,非常适合初学者。有些排序有多种实现方式我也写了,总之是很好的资料。八大排序:冒泡排序、插入排序、选择排序、归并排序、堆排序、快速排序、希尔排序和基数排序。真的...
冒泡排序是一种基础的排序算法,它通过重复遍历待排序...总的来说,本示例主要展示了冒泡排序的Java实现,通过随机生成的1000个数进行验证,确保了算法的正确性。同时,它也为我们提供了学习和理解其他排序算法的基础。
自己写的插入排序,随机产生1000次,每次产生0-1000个数,验证算法正确性。java实现。
在Java实现中,通过遍历数组,将每个元素与前面已排序的部分进行比较,如果当前元素小于前一个元素,则将其向前移动,直到找到合适的位置插入。这种算法对于部分有序的数据有较好的效率。 2. **希尔排序(Shell ...
八大排序java实现版本,直接插入排序、折半插入排序、冒泡排序、简单选择排序、希尔插入排序、快速排序 、堆排序、2-路归并排序 、基数排序,并有时间比较,博文...
Java实现计数排序的关键步骤如下: 1. **初始化计数数组**:创建一个与待排序数组最大值相等长度的计数数组,所有元素初始化为0。 2. **计数过程**:遍历待排序数组,对于每个元素,将其值作为索引增加计数数组...
在Java中实现插入排序,主要涉及数组操作和循环控制,我们可以从以下几个方面来理解这个过程。 1. **基本概念** 插入排序在实际操作中类似于打扑克牌,每拿到一张新牌(数组中的元素),就将其插入到已排序的序列...
Java实现外部归并排序的过程包括以下几个关键步骤: 1. **划分阶段**: - 将原始数据分割成多个小文件,每个文件包含可以一次性加载到内存中的数据量。这通常通过创建一系列的子序列(也称为块或桶)完成。 - 对...
总的来说,快速排序和折半查找是计算机科学中不可或缺的算法,通过递归和分治策略,可以在Java中高效地实现这些算法,并结合界面设计,为用户提供直观的交互体验。在实际项目中,理解和掌握这些算法有助于优化数据...
以下将详细介绍堆排序的原理、步骤以及Java实现。 **堆排序的原理** 堆排序的核心思想是构建一个完全二叉树,即堆,然后通过调整堆结构,使得根节点(最大元素或最小元素)总能处于正确的位置。这个过程分为两个...
在Java中实现冒泡排序,我们可以按照以下步骤进行: 1. **基本概念**: 冒泡排序的核心思想是重复地走访过要排序的元素列表,依次比较相邻的两个元素,如果它们的顺序(如从小到大、从大到小)错误就把它们交换...
public static void quicksort(int[] array,int start, int end){ if(start>=end) return; int middle=partition(array,start,end); quicksort(array,start,middle-1); quicksort(array,middle+1,end);...