今天特地把快速算法用Java实现了一下,毕竟找工作面试笔试用的比较多。
package String.Cheng;
import java.util.Scanner;
public class QuickSort {
public static void Swap(int []s,int l,int r){
int temp;
if (s[l]<s[r]&&s[r]<s[(l+r)/2]) {
temp = s[r];
s[r] = s[l];
s[l] = temp;
}else if (s[l]>s[r]&&s[r]>s[(l+r)/2]) {
temp = s[r];
s[r] = s[l];
s[l] = temp;
}
if (s[l]<s[(l+r)/2]&&s[r]>s[(l+r)/2]) {
temp = s[(l+r)/2];
s[(l+r)/2] = s[l];
s[l] = temp;
}else if (s[l]<s[(l+r)/2]&&s[r]>s[(l+r)/2]) {
temp = s[(l+r)/2];
s[(l+r)/2] = s[l];
s[l] = temp;
}
}
public static void QuickSort(int s[], int l, int r)
{
if (l < r)
{
Swap(s,l,r); //取数组的开始、中间、结束位置三个数的中间数作为枢纽元
int i = l, j = r, x = s[l];
while (i < j)
{
while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
QuickSort(s, l, i - 1); // 递归调用
QuickSort(s, i + 1, r);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("请输入数组,以空格隔开!");
Scanner sc = new Scanner(System.in);
String b[] = sc.nextLine().split(" ");
int a[] = new int[b.length];
for (int i = 0; i < b.length; i++) {
a[i] = Integer.parseInt(b[i]);
}
QuickSort(a,0,a.length-1);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+",");
}
}
}