1.利用递归算法求解数组各元素的和;
//实现代码
public static int sum(int[] arr,int n)
{
if (n==0)
{
return 0;
}
else{
int aa=sum(arr,n-1);
return aa+arr[n-1];
}
}
//测试代码
public static void main(String[] args) {
int []a={1,1,1,2,3};
int aa=sum(a,5);
System.out.println(aa);
}
//运行结果:8
2.利用快慢指针实现数组元素去重
//实现代码
public static void quchong(int [ ]arr ,int val) {
int fast = 0;
int slow = 0;
while (fast < arr.length) {
if (arr[fast] != val)
{ slow++;
arr[slow] = arr[fast];
}fast++;
}
System.out.println(Arrays.toString(arr));
}
//测试代码
public static void main(String[] args) {
int[] errr={1,2,5,1,1,1,2,5,2};
quchong(errr,1);
}
3.实现数组扩容并插入新元素
//实现代码
public static void insert(int[] arr,int val,int index,int temp)
{
if (temp == arr.length) {
int[] brr = new int[arr.length * 2];
for (int i = 0; i < arr.length; i++) {
brr[i] = arr[i];
}
arr = brr;
}
System.out.println(Arrays.toString(arr));
for (int i = temp; i > index; i--) {
arr[i] = arr[i - 1];
}
arr[index] = val;
System.out.println(Arrays.toString(arr));
}
}
//测试代码
public static void main(String[] args) {
insert(a,15555,2,temp);
}
八大排序基本算法:
1.冒泡排序
public class BubbleSort {
public static void main(String[] args) {
int[] arr={1,5,6,2,3,9,8,13};
Bubble_Sort(arr);
}
public static void Bubble_Sort(int[] arr)
{
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];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
2.选择排序
public class SelectionSort {
public static void main(String[] args) {
int[] arr={1,5,6,2,3,9,8,13};
Selection_Sort(arr);
}
public static void Selection_Sort(int[] arr)
{
for (int i = 0; i < arr.length; i++) {
int min=arr[i];int mindex =i;
for (int j = i+1; j < arr.length; j++) {
if (arr[j]<min)
{
min=arr[j];
mindex=j;
}
}
if (mindex!=i)
{
int temp=arr[mindex];
arr[mindex]=arr[i];
arr[i]=min;
}
}
System.out.println(Arrays.toString(arr));
}
}
3.插入排序
public class InsertSort {
public static void main(String[] args){
int[] arr={1,5,6,2,3,19,12,18,13};
Insert_Sort(arr);
//运行结果:[1,2,3,5,6,12,13,18,19]
}
public static void Insert_Sort(int[] arr)
{
for (int i = 1; i < arr.length;i++){
while (arr[i]<arr[i-1]){
int temp=arr[i];
arr[i]=arr[i-1];
arr[i-1]=temp;
if(i>1){
i--;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
4.归并排序
package com.company;
import java.util.Arrays;
public class MergeSort {
public static void main(String[] args) {
int[] arr={1,5,6,2,3,19,12,18,13,11};
Divide(arr,0, arr.length-1);
Merge_Sort(arr,0,(arr.length-1+0)/2,arr.length-1);
}
public static void Divide(int[]arr,int start,int end)
{
int center=(start+end)/2;
if (start<end){
Divide(arr,start,center);
Divide(arr,center+1,end);
Merge_Sort(arr,start,center,end);}
}
public static void Merge_Sort(int []arr,int start,int center,int end)
{
int[] arr2=new int[end-start+1];
int i=start;
int j=center+1;
int index=0;
while(i<=center&&j<=end)
{
if (arr[i]>=arr[j])
{
arr2[index]=arr[j];
j++;
}else
{
arr2[index]=arr[i];
i++;
}
index++;
}
while(i<=center)
{
arr2[index]=arr[i];
i++;
index++;
}
while(j<=end)
{
arr2[index]=arr[j];
j++;
index++;
}
for (int n = 0; n < arr2.length; n++) {
arr[n+start]=arr2[n];
}
System.out.println(Arrays.toString(arr));
}
}
5.基数排序
public class RadixSort {
public static void main(String[] args) {
int[] arr={1,5,6,2,3,19,12,18,13};
Radix_Sort(arr);
//运行结果:[1, 2, 12, 3, 13, 5, 6, 18, 19]
// [1, 2, 3, 5, 6, 12, 13, 18, 19]
}
public static void Radix_Sort(int[] arr)
{//创建桶
int[][] mrr=new int[10][arr.length];
//创建桶计数器
int[] bucketcount=new int[10];
//排序个位
for (int i = 0; i < arr.length; i++) {
int m=arr[i]%10;//取个位数字
int count=bucketcount[m];
mrr[m][count]=arr[i];
bucketcount[m]=count+1;
}
// for (int i = 0; i < bucketcount.length; i++) {
// System.out.println(bucketcount[i]);
// }
int a=0;
for (int j = 0; j < bucketcount.length; j++) {
if (bucketcount[j]!=0)
{
for (int k = 0; k <bucketcount[j]; k++) {
arr[a]=mrr[j][k];
a++;
}
}
bucketcount[j]=0;
}
System.out.println(Arrays.toString(arr));
//排序十位
for (int i = 0; i < arr.length; i++) {
int mm=(arr[i]/10)%10;//取十位数字
int count=bucketcount[mm];
mrr[mm][count]=arr[i];
bucketcount[mm]=count+1;
}
// for (int i = 0; i < bucketcount.length; i++) {
// System.out.println(bucketcount[i]);
// }
int aa=0;
for (int j = 0; j < bucketcount.length; j++) {
if (bucketcount[j]!=0)
{
for (int k = 0; k <bucketcount[j]; k++) {
arr[aa]=mrr[j][k];
aa++;
}
}
bucketcount[j]=0;
}
System.out.println(Arrays.toString(arr));
}
}
6.希尔排序
public class ShellSort {
public static void main(String[] args){
int[] arr={1,5,6,2,3,19,12,18,13};
Shell_Sort(arr);
//运行结果:[1,2,3,5,6,12,13,18,19]
}
public static void Shell_Sort(int []arr)
{
for (int i = arr.length/2; i >=1; i/=2){
for (int j = i; j < arr.length ; j++) {
for (int k = j-i; k >=0; k-=i) {
if (arr[k]>arr[k+i])
{
int temp=arr[k];
arr[k]=arr[k+i];
arr[k+i]=temp;
} }
}
}
System.out.println(Arrays.toString(arr));
}
}
7.快速排序(重要:***)
public class QuickSort {
public static void main(String[] args) {
int[] arr={1,5,6,2,3,19,12,18,13,11};
Quick_Sort(arr,0, arr.length-1);
System.out.println(Arrays.toString(arr));
}
public static void Quick_Sort(int[] arr,int low,int high)
{
if (arr == null || arr.length <= 0) {
return;
}
if (low >= high) {
return;
}
int left = low;
int right = high;
int key = arr[left];
while (left < right) {
while (left < right && arr[right] >= key){
right--;
}
while (left < right && arr[left] <= key){
left++;
}
if (left < right) {
swap(arr, left, right);
}
}
swap(arr, low, left);
System.out.println("Sorting:" + Arrays.toString(arr));
Quick_Sort(arr, low, left-1);
Quick_Sort(arr, left + 1, high);
}
public static void swap(int arr[], int low, int high){
int tmp = arr[low];
arr[low] = arr[high];
arr[high] = tmp;
}
}
8.堆排序(重要:*****)
public class HeapSort {
public static void main(String[] args) {
int[] arr={1,5,6,2,3,19,12,18,13,11};
Heap_Sort(arr);
System.out.println(Arrays.toString(arr));
}
public static void Heap_Sort(int []arr){
for(int i=arr.length/2-1;i>=0;i--){
adjustHeap(arr,i,arr.length);
}
for(int j=arr.length-1;j>0;j--){
swap(arr,0,j);
adjustHeap(arr,0,j);
}
}
public static void adjustHeap(int []arr,int i,int length){
int temp = arr[i];
for(int k=i*2+1;k<length;k=k*2+1){
if(k+1<length && arr[k]<arr[k+1]){
k++;
}
if(arr[k] >temp){
arr[i] = arr[k];
i = k;
}else{
break;
}
}
arr[i] = temp;
}
public static void swap(int []arr,int a ,int b){
int temp=arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
}