数组的几种排序算法的实现

       数组的排序方法有很多,效率也各不相同,下面简单介绍一下几种常见的排序算法。

      1.选择排序法:将要排序的数组分成两部分,一部分是从大到小已经排好序的,一部分是无序的,从无序的部分取出最小的放到已经排序的最后面。实现如下:

public int[] choiceSort(int[] arr){
		for(int i = 0;i < arr.length;i++){
			int m = i;
			for(int j = i + 1;j < arr.length;j++){
				//如果第j个元素比第m个元素小,将j赋值给m
				if(arr[j] < arr[m]){
					m = j;
				}
			}
			//交换m和i两个元素的位置
			if(i != m){
				int t = arr[i];
				arr[i] = arr[m];
				arr[m] = t;
			}
		}
		return arr;
	}
       2.冒泡排序法:冒泡排序的思路就不用介绍了。上实现:

public int[] bubbleSort(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 t = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = t;
				}
			}
		}
		return arr;
	}
      3.插入排序法:将要排序的数组分成两部分,每次从后面的部分取出索引最小的元素插入到前一部分的适当位置。基本实现如下:
public int[] insertSort(int[] arr){
		for(int i = 1;i < arr.length;i++){
			int temp = arr[i];
			int j = i - 1;
			while(temp < arr[j]){
				arr[j+1] = arr[j];
				j--;
				if(j == -1){
					break;
				}
			}
			arr[j+1] = temp;
		}
		return arr;
	}
      3.快速排序法:快速排序法号称是目前最优秀的算法之一,实现思路是,将一个数组的排序问题看成是两个小数组的排序问题,而每个小的数组又可以继续看成更小的两个数组,一直递归下去,直到数组长度大小最大为2。实现如下:
public int[] fastSort(int[] arr,int left,int right){
		if(left < right){
			int s = arr[left];
			int i = left;
			int j = right + 1;
			while(true){
				//向右找大于s的元素的索引
				while(i+1 < arr.length && arr[++i] < s);
				//向左找小于s的元素的索引
				while(j-1 > -1 && arr[--j] > s);
				//如果i >= j 推出循环
				if(i >= j){
					break;
				}else{
					//教化i和j位置的元素
					int t = arr[i];
					arr[i] = arr[j];
					arr[j] = t;
				}
			}
			arr[left] = arr[j];
			arr[j] = s;
			//对左面进行递归
			fastSort(arr,left,j-1);
			//对右面进行递归
			fastSort(arr,j+1,right);
		}
		return arr;
	}

  • 订阅我的公众号,发现最新文章



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值