您的位置:首页 > 编程语言 > Java开发

排序方法整理Java - 冒泡排序、选择排序、插入排序、快速排序

2014-11-20 09:46 363 查看
/**
* 排序方法整理
* @author zhyea
*
*/
public class Sort {
/**
* 冒泡排序,从小到大。
* 冒泡排序是比较相邻的两个元素,若顺序错误,则执行交换。循环走访序列直到不需要比较。稳定排序。
* @param arr
*             待排序的数组
*/
public static void bubbleSort(int[] arr){
int tmp = 0;
for(int k=0; k<arr.length; k++){
for(int i=1; i<arr.length; i++){
if(arr[i-1] > arr[i] ){
tmp = arr[i];
arr[i] = arr[i-1];
arr[i-1] = tmp;
}
}
}
}

/**
* 选择排序,从小到大
* 每次从待排序序列中取出最大(或最小)的一个元素,放入已排好序的序列后面。不稳定排序。
* @param arr
*             待排序数组
*/
public static void selectSort(int[] arr){
int tmp = 0;
for(int k=0; k<arr.length; k++){
for(int i=k+1; i<arr.length; i++){
if(arr[i] < arr[k]){
tmp = arr[i];
arr[i] = arr[k];
arr[k] = tmp;
}
}
}
}

/**
* 插入排序,从小到大
* 从待排序序列中取出一个,插入已排好序的序列的适当位置,如是重复。稳定排序。
* @param arr
*             待排序数组
*
*/
public static void insertSort(int[] arr){
int tmp = 0;
for(int k=1; k<arr.length; k++){
for(int i=k; i>0; i--){
if(arr[i]<arr[i-1]){
tmp = arr[i];
arr[i] = arr[i-1];
arr[i-1] = tmp;
}
}
}
}

/**
* 快速排序,从小到大
* 通过一次排序,将待排序序列分成两部分,其中一部分中的值比另一部分都小;递归如上步骤,可完成排序。不稳定排序
* 可以通过减少交换优化快速排序,不列出了
* @param arr
*/
public static void quickSort(int[] arr, int low, int high){

int l = low;
int h = high;

int tmp = 0;
int key = arr[0];
while(h>l){
while(h>l && arr[h]>=key){
h--;
}
if(h>l){
tmp = arr[l];
arr[l] = arr[h];
arr[h] = tmp;
l++;
}else{
break;
}

while(h>l && arr[l]<=key){
l++;
}
if(h!=l){
tmp = arr[h];
arr[h] = arr[l];
arr[l] = tmp;
h--;
}else{
break;
}
}

if(l>low)quickSort(arr, 0, h-1);
if(h<high)quickSort(arr, l+1, high);
}

public static void main(String[] args){
int[] arr = {8, 5, 4, 6, 9, 7, 5, 6};
System.out.println("冒泡排序" );
bubbleSort(arr);
printArr(arr);
}

/**
* 循序输出数组中的每个元素
* @param arr
*             待输出数组
*/
private static void printArr(int[] arr){
for(int i=0; i<arr.length; i++){
System.out.print(arr[i] + ", ");
}
System.out.print("\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐