排序算法 JAVA

                                                     


插入排序:

public class InsertionSort {
	int[] arr;
	public InsertionSort(int[] arr){
		this.arr = arr;
	}
	
	public void Sort(){
		int i,j,key;
		for(i=1;i<arr.length;i++){
			key = arr[i];
			j=i-1;
			//arr[j]比当前值大时,向后移动一位
			while(j>=0&&arr[j]>key){
				arr[j+1]=arr[j];//arr[j]值后移
				j--;//j前移
			}
			arr[j+1]=key;//将当前值插入
			printArr(arr);
		}
		
	}
}


希尔排序:

public class ShellSort {
	int[] arr;
	public ShellSort(int[] arr){
		this.arr =arr;
	}
	
	public void Sort(){
		int len = arr.length;
		for(int gap=len/2;gap>0;gap/=2){
			for(int i=gap;i<len;i++){
				for(int j=i-gap;j>=0;j-=gap){
					int key = arr[j];
					if(key>arr[j+gap]){
						arr[j] = arr[j+gap];
						arr[j+gap] = key;
					}
				}
			}
		}
		printArr(arr);
	}	
}


冒泡排序:

public class BubbleSort {
	int[] arr;
	public BubbleSort(int[] arr){
		this.arr = arr;
	}
	
	public void Sort(){
		int i,j;
		for(i=0;i<arr.length;i++){
			for(j=arr.length-2;j>=i;j--){
				if(arr[j]>arr[j+1]){
					int temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
				}
			}
		}
		printArr(arr);
	}
	//
	public void Sort_Improve(){
		int i,j;
		boolean flag = true;
		for(i=0;i<arr.length && flag;i++){
			flag=false;
			for(j=arr.length-2;j>=i;j--){
				if(arr[j]>arr[j+1]){			
					int temp=arr[j];
					arr[j]=arr[j+1];
					arr[j+1]=temp;
					flag = true;
				}
			}
		}
		printArr(arr);
	}
}


选择排序:


public class SelectionSort {
	int[] arr;
	public SelectionSort(int[] arr){
		this.arr =arr;
	}
	
	public void Sort(){
		int i,j,min;
		for(i=0;i<arr.length-1;i++){
			min = i;
			for(j=i+1;j<arr.length;j++){
				if(arr[min]>arr[j]){
					min=j;
				}
			}
			if(i!=min){
				int temp = arr[min];
				arr[min]=arr[i];
				arr[i]=temp;			
			}
		}
		printArr(arr);
	}
  }

快速排序:

public class QuickSort {
	public void Sort(int[] arr,int low,int high){
		int l = low;
		int h = high;
		int povit= arr[low];
		while(l<h){
			while(l<h&&arr[h]>=povit)
				h--;
			if(l<h){
				int temp = arr[h];
				arr[h] = arr[l];
				arr[l] = temp;
				l++;
			}
			while(l<h&&arr[l]<=povit)
				l++;
			if(l<h){
				int temp = arr[h];
				arr[h]=arr[l];
				arr[l]=temp;
				h--;
			}
			if(l>low)Sort(arr,low,h-1);
			if(h<high)Sort(arr,l+1,high);
		}
		
		printArr(arr);
	}
}

堆排序:

public class HeapSort {
	int[] arr;
	int heapsize;
	
	public int partent(int i){
		return i/2;
	}
	
	public int leftchild(int i){
		return 2*i;
	}
	
	public int rightchild(int i){
		return 2*i+1;
	}
	
	public HeapSort(int[] arr){
		this.arr = arr;
		this.heapsize = arr.length;
	}
	
	public void max_heapify(int[] arr,int i){
		int leftchild = leftchild(i);
		int rightchild = rightchild(i);
		int largest = 0;
		if(leftchild<heapsize&&arr[i]<arr[leftchild]){
			largest = leftchild;
		}else{
			largest = i;
		}
		if(rightchild<heapsize&&arr[largest]<arr[rightchild]){
			largest = rightchild;
		}
		if(largest == i){
			return;
		}else{
			int temp = arr[i];
			arr[i] = arr[largest];
			arr[largest] = temp;
			max_heapify(arr,largest);
		}
	}
	
	public void build_max_heap(int[] arr){
		for(int i=arr.length/2;i>=1;i--){
			max_heapify(arr,i);
		}
	}
	
	public void Sort(){
		build_max_heap(arr);
		printArr(arr);
		for(int i =arr.length-1;i>=1;i--){
			int temp = arr[0];  
	        arr[0] = arr[i];  
	        arr[i] = temp;
	        heapsize--; 
	        max_heapify(arr, 0);  
	        printArr(arr);
		}
		printArr(arr);
	}
}

归并排序:

public class MergeSort {	
    public 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;  
    }  
  
    public void merge(int[] nums, int low, int mid, int high) {  
        int[] temp = new int[high - low + 1];  
        int i = low;// 左指针  
        int j = mid + 1;// 右指针  
        int k = 0;  
  
        // 把较小的数先移到新数组中  
        while (i <= mid && j <= high) {  
            if (nums[i] < nums[j]) {  
                temp[k++] = nums[i++];  
            } else {  
                temp[k++] = nums[j++];  
            }  
        }  
  
        // 把左边剩余的数移入数组  
        while (i <= mid) {  
            temp[k++] = nums[i++];  
        }  
  
        // 把右边边剩余的数移入数组  
        while (j <= high) {  
            temp[k++] = nums[j++];  
        }  
  
        // 把新数组中的数覆盖nums数组  
        for (int k2 = 0; k2 < temp.length; k2++) {  
            nums[k2 + low] = temp[k2];  
        }  
    }  
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值