admin 管理员组

文章数量: 1086019


2024年3月7日发(作者:javaswing计算天数)

JAVA程序算法源代码二十例

以下是二十个JAVA程序算法的源代码:

1.两数之和:

```

public int[] twoSum(int[] nums, int target)

Map map = new HashMap<>(;

for (int i = 0; i < ; i++)

}

(nums[i], i);

}

throw new IllegalArgumentException("No two sum solution");

```

2.斐波那契数列:

```

public int fibonacci(int n)

if (n <= 1)

return n;

}

int[] fib = new int[n + 1];

fib[0] = 0;

fib[1] = 1;

for (int i = 2; i <= n; i++)

fib[i] = fib[i - 1] + fib[i - 2];

}

return fib[n];

```

3.判断素数:

```

public boolean isPrime(int n)

if (n <= 1)

return false;

}

for (int i = 2; i * i <= n; i++)

if (n % i == 0)

return false;

}

}

return true;

```

4.判断回文数:

```

public boolean isPalindrome(int x)

if (x < 0 , (x % 10 == 0 && x != 0))

return false;

}

int reversed = 0;

while (x > reversed)

reversed = reversed * 10 + x % 10;

x/=10;

}

return x == reversed , x == reversed / 10;

```

5.最大公约数:

```

public int gcd(int a, int b)

while (b != 0)

int tmp = b;

b=a%b;

a = tmp;

}

return a;

```

6.最小公倍数:

```

public int lcm(int a, int b)

return (a / gcd(a, b)) * b;

```

7.二分查找:

```

public int binarySearch(int[] nums, int target)

int left = 0, right = - 1;

while (left <= right)

int mid = left + (right - left) / 2;

if (nums[mid] == target)

return mid;

}

if (nums[mid] < target)

left = mid + 1;

} else

right = mid - 1;

}

}

return -1;

```

8.冒泡排序:

```

public void bubbleSort(int[] nums)

int n = ;

for (int i = 0; i < n - 1; i++)

for (int j = 0; j < n - i - 1; j++)

if (nums[j] > nums[j + 1])

int temp = nums[j];

nums[j] = nums[j + 1];

nums[j + 1] = temp;

}

}

}

```

9.选择排序:

```

public void selectionSort(int[] nums)

int n = ;

for (int i = 0; i < n - 1; i++)

int minIndex = i;

for (int j = i + 1; j < n; j++)

if (nums[j] < nums[minIndex])

minIndex = j;

}

}

int temp = nums[minIndex];

nums[minIndex] = nums[i];

nums[i] = temp;

}

```

10.插入排序:

```

public void insertionSort(int[] nums)

int n = ;

for (int i = 1; i < n; i++)

int key = nums[i];

int j = i - 1;

while (j >= 0 && nums[j] > key)

nums[j + 1] = nums[j];

j--;

}

nums[j + 1] = key;

}

```

11.快速排序:

```

public void quickSort(int[] nums, int left, int right)

if (left < right)

int pivotIndex = partition(nums, left, right);

quickSort(nums, left, pivotIndex - 1);

quickSort(nums, pivotIndex + 1, right);

}

private int partition(int[] nums, int left, int right)

int pivot = nums[right];

int i = left - 1;

for (int j = left; j < right; j++)if (nums[j] < pivot)

i++;

int temp = nums[i];

nums[i] = nums[j];

nums[j] = temp;

}

}

int temp = nums[i + 1];

nums[i + 1] = nums[right];

nums[right] = temp;

return i + 1;

```

12.归并排序:

```

public void mergeSort(int[] nums, int left, int right)

if (left < right)

int mid = left + (right - left) / 2;

mergeSort(nums, left, mid);

mergeSort(nums, mid + 1, right);

merge(nums, left, mid, right);

}

private void merge(int[] nums, int left, int mid, int right)int[] temp = new int[right - left + 1];

int i = left, j = mid + 1, k = 0;

while (i <= mid && j <= right)

if (nums[i] <= nums[j])

temp[k++] = nums[i++];

} else

temp[k++] = nums[j++];

}

}

while (i <= mid)

temp[k++] = nums[i++];

}

while (j <= right)

temp[k++] = nums[j++];

}

for (int m = 0; m < ; m++)

nums[left + m] = temp[m];

}

```

13.求阶乘:

```

public int factorial(int n)

if (n == 0)

return 1;

}

return n * factorial(n - 1);

```

14.斐波那契数列递归版本:

```

public int fibonacciRecursive(int n)

if (n <= 1)

return n;

}

return fibonacciRecursive(n - 1) + fibonacciRecursive(n - 2);

```

15.求和递归版本:

```

public int sumRecursive(int[] nums, int n)

if (n <= 0)

return 0;

}

return sumRecursive(nums, n - 1) + nums[n - 1];

```


本文标签: 排序 递归 版本 计算 算法