两种交换排序代码实现(冒泡排序+快速排序【可多种方式优化】)

交换排序

1、冒泡排序

2、快速排序【可多种方式优化】


交换排序

1、冒泡排序

afsaf

package sort;

public class BubbleSort {
	
	//普通冒泡排序
	public static void sortA(int[] arr,int n){
		int tmp;//临时变量
		int compare=0;//比较趟数
		int count=0;//比较次数
		int change=0;//交换位置次数
		for(int i=0;ii;j--){//冒泡排序,从后往前
				count++;
				if(arr[j-1]>arr[j]){
					change++;
					tmp=arr[j-1];
					arr[j-1]=arr[j];
					arr[j]=tmp;
				}
			}
		}
		System.out.println("比较趟数"+compare);
		System.out.println("比较次数"+count);
		System.out.println("交换位置次数"+change);
	}

	
	//改进后的冒泡排序
	public static void sortMore(int[] arr,int n){
		int tmp;//临时变量
		int compare=0;//比较趟数
		int count=0;//比较次数
		int change=0;//交换位置次数
		boolean flag=true;
		for(int i=0;ii;j--){//冒泡排序,从后往前
				count++;
				
				if(arr[j-1]>arr[j]){
					change++;
					tmp=arr[j-1];
					arr[j-1]=arr[j];
					arr[j]=tmp;
					flag=true;//某一趟中存在元素的交换,说明未排好序
				}
			}
			//判断是否还存在比较的情况
			if(!flag){//某一趟中不存在元素的交换,说明已经排好序了
				break;//结束for循环
			}
//			if(flag==false){
//				break;//结束for循环
//			}
//			System.out.println("比较ing..");
		}
		System.out.println("比较趟数"+compare);
		System.out.println("比较次数"+count);
		System.out.println("交换位置次数"+change);
	}
	
	public static void main(String[] args) {
		//普通冒泡排序
		int  arr[]={4,5,6,3,1,9,0,8,7,2};
		sortA(arr,arr.length);
		System.out.println("排序后:");
		for(int i=0;i

2、快速排序【优化】

package sort;

//快速排序
public class QuickSort {

	//交换两个元素的值
	public static void swap(int[] arr,int low,int high){
		int temp=arr[low];
		arr[low]=arr[high];
		arr[high]=temp;
	}
	
	//确立基本点+排序
	public static int partition(int[] arr,int low,int high){
		int point=low;//基本点的值
		
		//目标   基本点  ,左边的值,都比arr[point]小; 右边的值,都比arr[point]大
		while(lowarr[low]){
				low++;
			}
			swap(arr,low,point);//交换元素位置
			point=low;//小值位置【point记录--交换后的位置】
		}
		return point;//【point记录--交换后的位置】
	}
	
	
	public static void sort(int[] arr,int low,int high){
		if(low




你可能感兴趣的:(算法知识)