在平常写代码的过程中我们经常会遇到排序的情况,下面我就写了几种常见的排序算法,虽然在真正的项目开发中。很少会用到自己写的排序算法。但是只有懂得了排序算法具体是怎么实现的,这样用起来就会更加的得心应手。我只写了几种算法。下面贴上自己写的代码。代码里面有算法的思路,希望能够有点用。
package sort;
/**
* @author 曾炜龙 E-mail: 1501122784@qq.com
* @date 创建时间:2017年8月9日 上午10:22:11
* @version 1.0
* @parameter 排序算法
* @since
* @return
*/
public class SortDemo {
/**
* 冒泡排序
* 比较相邻的元素,如果第一个比第二个大,就交换他们两个
* 对么一堆相邻元素做同样的工作,从开始第一对到结尾最后一对。在这一点,最后的元素应该会是最大的数
* 针对所有的元素重复以上的步骤,除了最后一个,
* 持续每次对越来越少的元素重复上面的步骤,知道没有任何一对数字需要比较
* @param numbers 整型数组
*/
public static void bubbleSort(int[] numbers){
int size = numbers.length;
int temp = 0;
for(int i = 0;i<size-1;i++){
for(int j = 0;j<size-1-i;j++){
if(numbers[j]>numbers[j+1]){
temp = numbers[j];
numbers[j] = numbers[j+1];
numbers[j+1] = temp;
}
}
}
}
/**
* 快速排序
* 快速排序利用分治法,先取中值,然后利用中值对两边分别进行排序,然后递归调用函数。最后将数组组合在一起,就是排好序的
*
*/
public static void quickSort(int[] numbers,int low,int hign){
if(low<hign){
int middle = getMiddle(numbers,low,hign);
quickSort(numbers,low,middle-1); //对低的一方进行递归排序
quickSort(numbers,middle+1,hign); //对高的一方进行递归排序
}
}
public static int getMiddle(int[] numbers,int low,int hign){
int temp = numbers[low]; //数组的第一个元素为中值
while(low<hign){
while(low<hign && numbers[hign]>temp){
hign--;
}
numbers[low] = numbers[hign];
while(low<hign && numbers[low]<temp){
low++;
}
numbers[hign] = numbers[low];
}
numbers[low] = temp;
return low;
}
/**
* 快速排序方法调用
*
*/
public static void quick(int[] numbers){
if(numbers.length>0){
quickSort(numbers,0,numbers.length-1);
}
}
/**
* 选择排序
* 在未排序序列中找到最小元素,存放到排序序列的起始位置
* 再从剩余的元素中找到最小元素存放到 排序序列起始位置
* 以此类推,直到最后一个数排序完成
*/
public static void selectSort(int[] numbers){
int size = numbers.length;
int temp = 0; //中间变量
for(int i=0;i<size;i++){
int k = i;
for(int j=size-1;j>i;j--){
if(numbers[j]<numbers[k]){
k= j;
}
}
temp = numbers[i];
numbers[i] = numbers[k];
numbers[k] = temp;
}
}
/**
* 插入排序
* 取出第一个值,在排序序列元素中从后向前扫描
* 如果该元素大于新元素,则将该元素移到下一位置
* 重复步骤,直到找到已排序的元素小于或等于新元素的位置
*/
public static void insertSort(int[] numbers){
int size = numbers.length; //数组长度
int temp = 0; //中间量
int j = 0;
for(int i=0;i<size;i++){
temp = numbers[i];
for(j=i;j>0&&temp<numbers[j-1];j-- ){
numbers[j] = numbers[j-1];
}
numbers[j] = temp;
}
}
}