java是算法吗_【后端开辟】java是算法吗?

93277d4099eac265c365279ea578fcc6.png

java不是算法。

Java是一门面向对象编程言语,是一种普遍运用的计算机编程言语,具有跨平台、面向对象、泛型编程的特征,普遍运用于企业级Web运用开辟和挪动运用开辟。

算法(Algorithm)是指解题计划的正确而完全的形貌,是一系列处理题目的清楚指令,算法代表着用体系的要领形貌处理题目的战略机制。也就是说,能够对肯定范例的输入,在有限时刻内取得所请求的输出。假如一个算法有缺点,或不适合于某个题目,实行这个算法将不会处理这个题目。差别的算法能够用差别的时刻、空间或效力来完成一样的使命。一个算法的好坏能够用空间复杂度与时刻复杂度来权衡。

我们能够运用java言语来完成差别的算法。

Java的几种罕见排序算法

1、冒泡排序

2ff988e7bd32922060e1ec50ce71c38d.gif

a、冒泡排序,是经由历程每一次遍历猎取最大/最小值

b、将最大值/最小值放在尾部/头部

c、然后除开最大值/最小值,剩下的数据在举行遍历猎取最大/最小值

d、代码完成

public static void main(String[] args) {

int arr[] = {8, 5, 3, 2, 4};

//冒泡

for (int i = 0; i < arr.length; i++) {

//外层轮回,遍历次数

for (int j = 0; j < arr.length - i - 1; j++) {

//内层轮回,升序(假如前一个值比后一个值大,则交流)

//内层轮回一次,猎取一个最大值

if (arr[j] > arr[j + 1]) {

int temp = arr[j + 1];

arr[j + 1] = arr[j];

arr[j] = temp;

}

}

}

}

e、排序历程(赤色:挪动的数据)

5,3,2,4,8

3,2,4,5,8

2,3,4,5,8

2,3,4,5,8

2,3,4,5,8

2、挑选排序

c28905a1cf432690b6363a0705a1509d.gif

a、将第一个值算作最小值

b、然后和后续的比较找出最小值和下标

c、交流本次遍历的肇端值和最小值

d、申明:每次遍历的时刻,将前面找出的最小值,算作一个有序的列表,背面的算作无序的列表,然后每次遍历无序列表找出最小值。

e、代码完成

public static void main(String[] args) {

int arr[] = {6, 5, 3, 2, 4};

//挑选

for (int i = 0; i < arr.length; i++) {

//默许第一个是最小的。

int min = arr[i];

//纪录最小的下标

int index = i;

//经由历程与背面的数据举行比较得出,最小值和下标

for (int j = i + 1; j < arr.length; j++) {

if (min > arr[j]) {

min = arr[j];

index = j;

}

}

//然后将最小值与本次轮回的,最先值交流

int temp = arr[i];

arr[i] = min;

arr[index] = temp;

//申明:将i前面的数据算作一个排好的行列,i背面的算作一个无序行列。每次只需要找无需的最小值,做替代

}

}

f、排序历程(赤色:挪动的数据)

2,5,3,6,4

2,3,5,6,4

2,3,4,6,5

2,3,4,5,6

2,3,4,5,6

3、插进去排序

3f0b0d7aadbde7b73c72890542cc00d3.gif

a、默许从第二个数据最先比较。

b、假如第二个数据比第一个小,则交流。然后在用第三个数据比较,假如比前面小,则插进去(桀黠)。不然,退出轮回

c、申明:默许将第一数据算作有序列表,背面无序的列表轮回每一个数据,假如比前面的数据小则插进去(交流)。不然退出。

d、代码完成

public static void main(String[] args) {

int arr[] = {7, 5, 3, 2, 4};

//插进去排序

for (int i = 1; i < arr.length; i++) {

//外层轮回,从第二个最先比较

for (int j = i; j > 0; j--) {

//内存轮回,与前面排好序的数据比较,假如背面的数据小于前面的则交流

if (arr[j] < arr[j - 1]) {

int temp = arr[j - 1];

arr[j - 1] = arr[j];

arr[j] = temp;

} else {

//假如不小于,申明插进去终了,退出内层轮回

break;

}

}

}

}

e、排序历程(赤色:有序,黑色:无序)

5,7,3,2,4

3,5,7,2,4

2,3,5,7,4

2,3,4,5,7

4、希尔排序(插进去排序变种版)

a697437aeeb6e52b6117dbd7c8b2ff5b.gif

a、基本上和插进去排序一样的原理

b、不一样的处所在于,每次轮回的步长,经由历程减半的体式格局来完成

c、申明:基本原理和插进去排序相似,不一样的处所在于。经由历程距离多个数据来举行插进去排序。

d、代码完成

public static void main(String[] args) {

int arr[] = {7, 5, 3, 2, 4};

//希尔排序(插进去排序变种版)

for (int i = arr.length / 2; i > 0; i /= 2) {

//i层轮回掌握步长

for (int j = i; j < arr.length; j++) {

//j掌握无序端的肇端位置

for (int k = j; k > 0 && k - i >= 0; k -= i) {

if (arr[k] < arr[k - i]) {

int temp = arr[k - i];

arr[k - i] = arr[k];

arr[k] = temp;

} else {

break;

}

}

}

//j,k为插进去排序,不过步长为i

}

}

e、排序历程(步长4/2/1)

4,1,3,2,6,5,8,9,7

3,1,4,2,6,5,7,9,8

1,2,3,4,5,6,7,8,9

5、疾速排序

e19615cd669e6d66e99771d3e3ff0c80.gif

a、确认列表第一个数据为中心值,第一个值算作空白(低指针空白)。

b、然后在剩下的行列中,算作有摆布两个指针(上下)。

c、最先高指针向左挪动,假如碰到小于中心值的数据,则将这个数据赋值到低指针空白,而且将高指针的数据算作空白值(高指针空白)。然后先向右挪动一下低指针,而且切换低指针挪动。

d、当低指针挪动到大于中心值的时刻,赋值到高指针空白的处所。然后先高指针向左挪动,而且切换高指针挪动。反复c、d操纵。

e、直到高指针和低指针相称时退出,而且将中心值赋值给对应指针位置。

f、然后将中心值的摆布双方算作行的列表,举行疾速排序操纵。

g、代码完成

public static void main(String[] args) {

int arr[] = {7, 5, 3, 2, 4, 1, 8, 9, 6};

//疾速排序

int low = 0;

int high = arr.length - 1;

quickSort(arr, low, high);

}

public static void quickSort(int[] arr, int low, int high) {

//假如指针在统一位置(只要一个数据时),退出

if (high - low < 1) {

return;

}

//标记,从高指针最先,照样低指针(默许高指针)

boolean flag = true;

//纪录指针的实在位置

int start = low;

int end = high;

//默许中心值为低指针的第一个值

int midValue = arr[low];

while (true) {

//高指针挪动

if (flag) {

//假如列表右方的数据大于中心值,则向左挪动

if (arr[high] > midValue) {

high--;

} else if (arr[high] < midValue) {

//假如小于,则掩盖最最先的低指针值,而且挪动低指针,标志位改成从低指针最先挪动

arr[low] = arr[high];

low++;

flag = false;

}

} else {

//假如低指针数据小于中心值,则低指针向右挪动

if (arr[low] < midValue) {

low++;

} else if (arr[low] > midValue) {

//假如低指针的值大于中心值,则掩盖高指针停止时的数据,并向左挪动高指针。切换为高指针挪动

arr[high] = arr[low];

high--;

flag = true;

}

}

//当两个指针的位置相同时,则找到了中心值的位置,并退出轮回

if (low == high) {

arr[low] = midValue;

break;

}

}

//然后涌现有,中心值左侧的小于中心值。右侧的大于中心值。

//然后在对摆布双方的列表在举行疾速排序

quickSort(arr, start, low -1);

quickSort(arr, low + 1, end);

}

h、排序历程

6,5,3,2,4,1,7,9,8

1,5,3,2,4,6,7,9,8

1,5,3,2,4,6,7,9,8

1,4,3,2,5,6,7,9,8

1,2,3,4,5,6,7,9,8

1,2,3,4,5,6,7,9,8

1,2,3,4,5,6,7,8,9

6、兼并排序

0570eb3b73eb77739869d6cbe335267a.gif

a、将列表根据对等的体式格局举行拆分

b、拆分小最小快的时刻,在将最小块根据本来的拆分,举行兼并

c、兼并的时刻,经由历程摆布两块的左侧最先比较大小。小的数据放入新的块中

d、申明:简朴一点就是先对半拆成最小单元,然后将两半数据兼并成一个有序的列表。

e、代码完成

public static void main(String[] args) {

int arr[] = {7, 5, 3, 2, 4, 1,6};

//兼并排序

int start = 0;

int end = arr.length - 1;

mergeSort(arr, start, end);

}

public static void mergeSort(int[] arr, int start, int end) {

//推断拆分的不为最小单元

if (end - start > 0) {

//再一次拆分,晓得拆成一个一个的数据

mergeSort(arr, start, (start + end) / 2);

mergeSort(arr, (start + end) / 2 + 1, end);

//纪录最先/完毕位置

int left = start;

int right = (start + end) / 2 + 1;

//纪录每一个小单元的排序效果

int index = 0;

int[] result = new int[end - start + 1];

//假如查分后的两块数据,都还存在

while (left <= (start + end) / 2 && right <= end) {

//比较两块数据的大小,然后赋值,而且挪动下标

if (arr[left] <= arr[right]) {

result[index] = arr[left];

left++;

} else {

result[index] = arr[right];

right++;

}

//挪动单元纪录的下标

index++;

}

//当某一块数据不存在了时

while (left <= (start + end) / 2 || right <= end) {

//直接赋值到纪录下标

if (left <= (start + end) / 2) {

result[index] = arr[left];

left++;

} else {

result[index] = arr[right];

right++;

}

index++;

}

//末了将新的数据赋值给本来的列表,而且是对应分块后的下标。

for (int i = start; i <= end; i++) {

arr[i] = result[i - start];

}

}

}

f、排序历程

5,7,3,2,4,1,6

5,7,2,3,4,1,6

2,3,5,7,4,1,6

2,3,5,7,1,4,6

2,3,5,7,1,4,6

1,2,3,4,5,6,7

引荐教程:Java教程

以上就是java是算法吗?的细致内容,更多请关注ki4网别的相干文章!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值