速看(java算法经典案例)java算法编程,Java 算法实战,java算法实战,
学习编程最重要的就是实战,道理相信大家都懂,可真正能自己写出来,不出问题却不是一件简单的事情。而这篇文章就是想给还在学习编程的你,提供一些Java代码示例帮助,没有花哨的介绍,只有实用的代码。当然,这些代码也是我在学习总结的过程中记录下来的,可能不全面,也可能不那么完美,但我能保证的是它们都运行测试过。希望能对你有所启发。
语言只是工具,算法才是程序设计的灵魂。一个好的程序一定是有好的算法作为支撑,相信大家都知道怎么判断算法的好坏(时间复杂度、空间复杂度),还有一些啰嗦的话我就不说了,直接来看我总结的一些算法实例。
一、排序算法
各种排序算法的时间复杂度和空间复杂度1. 冒泡排序
冒泡排序的核心思想就是通过遍历,每次遍历把最大的数找出来放到此次遍历的最后一位,通过多次遍历把所有数组按序排放。
/** * 冒泡排序. * * @param numbers 一个无序数组. * @return 返回一个有序数组. */public static int[] bubbleSort(int[] numbers) {int temp;int size = numbers.length;for (int i = 0; i < size - 1; i++) {for (int j = 0; j < (size - 1 - i); j++) {if (numbers[j] > numbers[j + 1]) {temp = numbers[j];numbers[j] = numbers[j + 1];numbers[j + 1] = temp;}}}return numbers;}
2. 快速排序
快速排序的核心思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序(递归),以此达到整个数据变成有序序列。
把整个程序分解成几个小块,是面向对象程序的一个重要思想,如果大小和边界划分得当对于软件的维护性、扩充性和重用性的提升有巨大的帮助。
/** * 取分割的中间数. * * @param numbers 无序数组. * @param start 开始位置. * @param end 结束位置.* @retung 返回分割的中间数. */public static int partition(int[] numbers, int start, int end) {int middle = (start + end) / 2;if (numbers[middle] > numbers[end]) {swap(numbers[middle], numbers[end]);}if (numbers[start] > numbers[end]) {swap(numbers[start], numbers[end]);}if (numbers[middle] > numbers[start]) {swap(numbers[middle], numbers[start]);}int key = numbers[start];while (start < end) {while (start < end && numbers[end] >= key) {end--;}numbers[start] = numbers[end];while (start < end && numbers[start] <= key) {start++;}numbers[end] = numbers[start];}numbers[end] = key;return end;}/** * 封装一个交换数字的方法. */public static void swap(int a, int b) {int temp = a;a = b;b = temp;}/** * 快速排序的核心递归方法. ** @param numbers 无序数组. * @param start 起始位置. * @param end 结束位置. * @return 返回有序数组. */public static void quickCore(int[] numbers, int start, int end) {if (start >= end) {return;}int index = partition(numbers, start, end);quickCore(numbers, start, index - 1);quickCore(numbers, index + 1, end);}/** * 一层封装,方便使用,不用传参数. * @param numbers 无序数组.* @return 返回有序数组. */public static int[] quickSort(int[] numbers) {int start = 0;int end = numbers.length - 1;quickCore(numbers, start, end);return numbers;}
二、查找算法
1. 二分法查找
(1)普通实现
/** * 二分法查找普通实现. * * @param orderedArray 有序数组. * @param key 要查找的数值. * @return 没有查到返回 -1. */public static int binSearchNormal(int[] orderedArray, int key) {int start = 0;int end = orderedArray.length - 1;while (start <= end) {int mid = (start + end) / 2;if (key < orderedArray[mid]) {end = mid - 1;} else if (key > orderedArray[mid]) {start = mid + 1;} else {return mid;}}return -1;}
注意:二分法查找的前提是orderedArray是有序数组。
(2)递归实现
/** * 二分法查找递归实现. * * @param orderedArray 有序数组. * @param key 要查找的数值.* @param start 查找开始的位置. * @param end 查找结束的位置. * @return 没有查到返回 -1. */static int binSearchRecursion(int[] orderedArray, int key, int start, int end) {int mid = (start + end) / 2;if (key == orderedArray[mid]) {return mid;}if (start >= end) {return -1;} else if (key < orderedArray[mid]) {return binSearchRecursion(orderedArray, key, start, mid - 1);} else if (key > orderedArray[mid]) {return binSearchRecursion(orderedArray, key, mid + 1, end);}return -1;}
注意:二分法查找的前提是orderedArray是有序数组。
版权申明
本文系作者 @河马 原创发布在河马博客站点。未经许可,禁止转载。
暂无评论数据