package iYou.neugle.sort; public class Select_sort { public static void SelectSort(double[] array) { for (int i = 0; i < array.length - 1; i++) { int tempIndex = i; for (int j = i + 1; j < array.length; j++) { if (array[tempIndex] > array[j]) tem…
Q: 冒泡排序? A: 1) 比较相邻的元素.如果第一个比第二个大,就交换它们两个; 2) 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数; 3) 针对所有的元素重复以上的步骤,除了最后一个.因此总共有N - 1 趟; 4) 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. Q: 冒泡排序的Java代码? A: 示例: BubbleSort.java, BubbleSortTest.java Q: 冒泡排序的不变性? A: …
希尔排序 Q: 什么是希尔排序? A: 希尔排序因计算机科学家Donald L.Shell而得名,他在1959年发现了希尔排序算法. A: 希尔排序基于插入排序,但是增加了一个新的特性,大大地提高了插入排序的执行效率. Q: 回忆之前的插入排序,有哪些缺点? A: 回忆之前的简单排序的“插入排序”一节,在插入排序执行一半的时候,标记位i左边这部分数据项都是排过序的,而标记位右边的数据项则没有排过序.这个算法取出标记位所指的数据项,把它存储在一个临时变量里,接着,从刚刚被移除的数据项的左边第一个元…
Java 选择排序与冒泡排序 1.DataSorter.java public class DataSorter { //冒泡排序法 //主要思路:按升序排序,数组元素两两比较,大的立即排后面 public static void bubbleSort(int[] a) { for(int i = 0 ;i < a.length ;i++){ int index = i; for(int j = i ; j < a.length ; j ++){ if(a[index] > a [j])…
排序从大体上来讲,做了两件事情: 1.比較两个数据项: 2.交换两个数据项.或复制当中一项 一.冒泡排序 大O表示法:交换次数和比較次数都为O(N*N). 算法原理: 1.比較相邻的元素.假设第一个比第二个大,就交换他们两个. 2.对每一对相邻元素作相同的工作,从開始第一对到结尾的最后一对. 在这一点.最后的元素应该会是最大的数. 3.针对全部的元素反复以上的步骤,除了最后一个. 4.持续每次对越来越少的元素反复上面的步骤,直到没有不论什么一对数字须要比較. /** * 冒泡排序 demo *…
1.冒泡排序: 方法一: public static int[] MaoPao(int[] arr) { //执行多少次 for (int i = 0; i < arr.Length; i++) { //每执行1次,把最大的放在最后 for (int j = 0; j < arr.Length - 1; j++) { int a = arr[j]; int b = arr[j + 1]; if (a>b) { arr[j+1] = a; arr[j] = b; } } } return…
package iYou.neugle.sort; public class Shell_sort { public static void ShellSort(double[] array) { int n = array.length; for (int gap = n / 2; gap > 0; gap /= 2) { for (int i = gap; i < n; i++) { if (array[i] < array[i - gap]) { double temp = arr…
  package iYou.neugle.sort; public class Merge_sort { public static void MergeSort(double[] array, int start, int end) { if (start < end) { int middle = (start + end) / 2; MergeSort(array, start, middle); MergeSort(array, middle + 1, end); Merge(arra…
三大排序在我们刚开始学习编程的时候就接触过,也是刚开始工作笔试会遇到的,后续也会学习希尔.快速排序,这里顺便复习一下 冒泡排序: 步骤: 1.从首位开始,比较首位和右边的索引 2.如果当前位置比右边的大,则交换位置 3.当前位置的索引向右移动一位,必须两两比较 图例: 代码实现: public static int[] sort(int[] array) { for (int i = 1; i < array.length; i++) { //外层循环,代表着需要经过多少轮比较 boolean…
春晚好看吗?不存在的!!! 在Java数据结构和算法(三)——冒泡.选择.插入排序算法中我们介绍了三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大,那么这三种简单的排序所需要的时间则是我们所不能接受的.接着我们在讲解递归 的时候,介绍了归并排序,归并排序需要O(NlogN),这比简单排序要快了很多,但是归并排序有个缺点,它需要的空间是原始数组空间的两倍,当我们需要排序的数据占据了整个内存的一半以上的空间,那么是不能使用归并排序的. 本篇博客将…