package com.itheima;
/**
* 第四题 请列举您了解的一些排序算法,并用Java语言实现一个效率较高的。
* @author admin
*常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序
*当然在大多数情况下快速排序是一种相对高效的排序方法
*下面实现快速排序
*/
public class Test4 {
public static void main(String[] args){
int[] a ={18,98,39,80,23,84,2,54,98,347};
//int a[] = {34,5,67,8,90,92,3,4,56};
System.out.println("原序列为:");
//数组遍历输出
for (int n = 0; n < a.length; n++){
if (n!=(a.length-1)) {
System.out.print(a[n] + "--");
}
else{
System.out.println(a[n]);
}
}
quickSort(a, 0, a.length - 1);
System.out.println("排序后为:");
//排序后的数组遍历输出
for (int i = 0; i < a.length; i++){
if (i!=(a.length-1)) {
System.out.print(a[i] + "--");
}
else{
System.out.println(a[i]);
}
}
}
// 快速排序算法实现数组排序
public static void quickSort(int a[], int begin, int end){
if (begin >= end)
return;
int key = a[begin];// 存储该数组段以begin为下标的数组元素
int pointRight = begin;// 数组指针,向右指
int pointLeft = end;// 数组指针,向左指向
while (pointRight != pointLeft){
// 从右边找一个小于等于key的放到a[pointRight]
while (pointLeft != pointRight && a[pointLeft] > key){
pointLeft--;
}
if (pointLeft == pointRight)
break;
a[pointRight] = a[pointLeft];
pointRight++;
// 从左边找一个比key大的放到a[pointLeft]
while (pointLeft != pointRight && a[pointRight] <= key){
pointRight++;
}
if (pointLeft == pointRight)
break;
a[pointLeft] = a[pointRight];
pointLeft--;
}
a[pointRight] = key;
//使用递归方法完成排序
quickSort(a, begin, pointRight - 1);
quickSort(a, pointRight + 1, end);
}
}
题目还是自己作的好,java其实提供的有快排,直接调用即可,这个是自己写的 |