public class QuickSorted
{
public static void main(String[] args)
{
int[] a = new int[10];
for(int i = 0; i < a.length; i++)
{
a[i] = Math.round((int) (Math.random() * 50));
}
//排序前的顺序
System.out.print("排序前:");
for(int i = 0; i < a.length; i++)
{
System.out.print(a[i] + " ");
}
QuickSorted qs = new QuickSorted();
//qs.sorted(a, 0, a.length - 1);
qs.insertSorted(a);
System.out.println();
//排序后的顺序
System.out.print("排序后:");
for (int i = 0; i < a.length; i++)
{
System.out.print(a[i] + " ");
}
//验证排序是否正确
System.out.println();
for(int i = 0; i < a.length - 1; i++)
{
if(a[i] > a[i + 1])
{
System.out.println("排序错误,位置在第 " + i + "个元素");
break;
}
}
}
//快速排序
public void sorted(int[] a, int left, int right)
{
if(left > right)
{
return;
}
int l = left;
int r = right;
int baseValue = a[left];
while(l < r)
{
//①、从右往左查找比基数小的值
while(l < r && a[r] >= baseValue)
{
r--;
}
//②、从左往右查找比基数大的值
while(l < r && a[l] <= baseValue)
{
l++;
}
//③、如果 l < r 则交换
if(l < r)
{
a[l] = a[l] + a[r];
a[r] = a[l] - a[r];
a[l] = a[l] - a[r];
}
}
//④、将基数放到正确位置
//System.out.println("此时r = " + r);
a[left] = a[r];
a[r] = baseValue;
//⑤、递归
//递归左
sorted(a, left, r - 1);
//递归右
sorted(a, r + 1, right);
}
//插入排序
public void insertSorted(int[] a)
{
for (int i = 1; i < a.length; i++)
{
if (a[i - 1] > a[i])
{
int temp = a[i];
int j = i;
while (j > 0 && a[j - 1] > temp)
{
a[j] = a[j - 1];
j--;
}
a[j] = temp;
}
}
}
}