算法
文章平均质量分 74
kpskylonely
写代码的人
展开
-
直接插入排序
简单插入排序是稳定排序,每次都选取未排序序列中的元素与已排序序列比较,只有不等值时才会移动已排序序列,所以等值元素的相对顺序不变。时间复杂度0(n^2)。 public class InsertSort { public InsertSort(){} public static int[] sort(int[] array,String rule) { if(!rule.equa原创 2013-04-01 22:39:27 · 320 阅读 · 0 评论 -
冒泡排序
冒泡排序是一种稳定的排序算法。即相同的两个元素在排序之前和排序之后的相对顺序不变,因冒泡排序是两两比较,不等则对调,对于等值的元素不做变动。时间复杂度是0(n^2)。 public class BubbleSort { public BubbleSort(){} public static int[] sort(int[] array,String rule) { if(!rule.原创 2013-03-26 22:46:03 · 338 阅读 · 0 评论 -
快速排序
快速排序是一种不稳定排序。平均时间复杂度0(nlogn)。升序(降序)排序:每次选取一个基准数,先从后遍历直至遇到比基准数小(大)的数,则将该数与基准数的位置对调,并将该数位置视为下次置换的位置。再从前遍历直至遇到比基准数大(小)的数,则将该数置换到上次置换数的位置。直至从前遍历和从后遍历都到达同一位置,即找到基准数的位置,再将基准数替换位置的数即可。再对基准数左右的两个子集迭代该方法,即可完成整原创 2013-04-08 21:05:39 · 315 阅读 · 0 评论 -
Find the min jumps
Given an array of integers, each element represents the max number of jumps that you can move forward. Write a piece of code to find out the minimum number of elements you need to select to reach t原创 2013-03-25 11:30:27 · 865 阅读 · 0 评论 -
归并排序
归并排序是一种稳定排序,归并时需要两两比较,遇到等值时将位置在前的置前即保持相对顺序。时间复杂度是0(nlogn)。 public class MergeSort { public MergeSort(){} public static void merge(int[] array,int start,int mid,int end,int[] arraySorted,String r原创 2013-04-07 21:52:19 · 375 阅读 · 0 评论 -
Create equation
Question: Given an array with positive integers and another integer for example{7 2 4} 9, you are required to generate an equation, by inserting operator add ("+") and minus ("-") among the array原创 2013-03-24 12:33:15 · 911 阅读 · 0 评论 -
24点游戏
上一篇“求等式”问题是24点游戏的简化版。采用穷举法。 import java.util.Arrays; import java.util.Random; public class Game24points { public static double Threshold = 1E-6; public static int CardMax = 13; public static int原创 2013-03-24 15:36:40 · 513 阅读 · 0 评论 -
堆排序
堆排序可以看成是另一种希尔排序,但它的增量是以2^n,即从当前节点经过父节点再到根节点组成一个子集,再对子集内元素进行插入排序。堆排序是一种不稳定排序。平均时间复杂度是0(nlogn)。 public class HeapSort { public HeapSort(){} private static void CreatMinHeap(int[] array,int start,i原创 2013-04-06 19:26:17 · 307 阅读 · 0 评论 -
希尔排序
希尔排序是不稳定排序。因为是分割成子集进行插入排序的,相同元素的相对位置可能在不同子集的插入排序中发生变化。时间复杂度最优情况是0(nlog2n)。 public class ShellSort { public ShellSort(){} public static int[] sort(int[] array,String rule) { if(!rule.equalsIgn原创 2013-04-05 18:56:53 · 328 阅读 · 0 评论 -
二分查找
二分查找:实现中采用左闭右闭区间。在findPos中,如果要查找的数在数组中有重复值,则返回的是最靠近数组中间位置的值。在findPosFirst中,如果有重复值返回位置最前的值。在findPosLast中,如果有重复值返回位置最后的值。 public class Bsearch { public Bsearch(){} public static int[] array原创 2013-03-25 20:20:49 · 354 阅读 · 0 评论 -
简单选择排序
选择排序是一种不稳定排序。每次都选取未排序的序列中最大值或最小值,与第i个数值交换。交换中有可能破坏等数值元素的相对位置。例如: 4 6 4 2 1 第一遍选择会选取‘1’和第一个‘4’交换,则原来第一位的‘4’会排在第三位的‘4’之后。时间复杂度0(n^2)。 算法中需要注意的地方:每次选择极值时先记录当前位置(即要排序的位置),再遍历未排序的序列如有比当前数值大(或小)记录该原创 2013-03-28 08:13:46 · 315 阅读 · 0 评论