概述
一、排序:
1、冒泡排序Bubble Sort
原理:比较相邻的元素,小的值往前移
第一层for:控制执行轮数,长度-1
for(int i=0;i<a.length-1;i++)
第二层for:比较大小,交换位置
for(int j=0;j<a.length-1;j++){
1、比较大小
2、交换位置
}
2、选择排序
原理:每次从现有数据里挑出一个最小的直接放在最前面,以此类推
根据下标进行比较
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length;j++){
if(a[i]>a[j]){
int temp=a[j];
a[j]=a[i];
a[i]=temp;
}
}
}
3、插入排序算法
原理:没插入一个数都要将它和之前的已经完成排序的序列进行重新排序,也就是要找到新插入的数对应原序列中的位置。
(每次插入一个数都要对原来排序好的那部分序列进行重新的排序)
3.1 直接插入排序
思路:新插入一个数据的时候,排序过后的数组都是从小到大排序好的,所有我们需要从后往前查找,直到找到比我们要插入的数字还小的值。这个时候我们需要一个变量j作为标识
for(int i=1;i<a.length;i++){
int temp=a[i];
int j;
for(j=i-1;j>=0;j--){
if(a[j]>temp){
a[j+1]=a[i];
}else{
break;
}
}
a[j+1]=temp;
}
4、快速排序Quicksort
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行。以此达到整个数据变成有序序列。
排序流程:
- 设定一个分界值,通过该分界值将数组分成左右两部分
- 将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值
- 左边和右边的数据可以独立排序。左侧的数组数据,又取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧同理
- 重复上述过程,递归的执行。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。
5、归并排序
原理:建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个自序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
public static int[] sort(int[] nums, int low, int high) {
int mid = (low + high) / 2;
if (low < high) {
// 左边
sort(nums, low, mid);
// 右边
sort(nums, mid + 1, high);
// 左右归并
merge(nums, low, mid, high);
}
return nums;
}
二、排列组合:
1、二分查找
算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需要是有序不重复。
思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。
public class DichotomySearch {
public static void main(String[] args) {
int[] arr = new int[] { 12, 23, 34, 45, 56, 67, 77, 89, 90 };
System.out.println(search(arr, 12));
System.out.println(search(arr, 45));
System.out.println(search(arr, 67));
System.out.println(search(arr, 89));
System.out.println(search(arr, 99));
}
public static int search(int[] arr, int key) {
int start = 0;
int end = arr.length - 1;
while (start <= end) {
int middle = (start + end) / 2;
if (key < arr[middle]) {
end = middle - 1;
} else if (key > arr[middle]) {
start = middle + 1;
} else {
return middle;
}
}
return -1;
}
}
最后
以上就是高挑煎蛋为你收集整理的Java主要算法的全部内容,希望文章能够帮你解决Java主要算法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复