一.上机内容
1、设一个线性表,表内存放8个随机数字,分别使用选择、冒泡以及快速排序算法,对这个线性表进行排序。
2、从键盘输入或从文件中读取有限个任意同类型的数据生成无序线性表,并用简单排序方法和快速、堆排序方法、希尔排序方法对其进行排序,排序后,再从键盘输入一个同类型的数据,插入后使线性表仍然有序。
3*、奇偶交换排序如下所述:第一趟对所有奇数i ,将a[i]和a[i+1]进行比较;第二趟对所有的偶数i , 将a[i]和a[i+1]进行比较,若a[i]>a[i+1],则将两者交换;第三趟对奇数i ;第四趟对偶数i …依次类推,直至整个序列有序为止。试问这种排序方法的结束条件是什么?编写实现上述奇偶交换排序的算法。
二.代码实现
1、设一个线性表,表内存放8个随机数字,分别使用选择、冒泡以及快速排序算法,对这个线性表进行排序。
package com.上机.ch06;
// 快排
public class Quick {
/**
* 对数组内元素进行排序
* @param a
*/
public static void quickSort(Comparable[] a){
int lo = 0;
int hi = a.length -1;
quickSort(a,lo,hi);
}
public static void quickSort(Comparable[] a,int l,int r){
if( l >= r) return;
int mid = (l + r) / 2;
int i = l - 1,j = r + 1;
while(i < j){
// 循环结束 i==j
do{
i++;
}while (greater(a[mid],a[i]));
do{
j--;
}while(greater(a[j],a[mid]));
if(i < j) wrap(a,i,j);
}
quickSort(a,l,j); // 递归处理左边
quickSort(a,j+1,r); // 递归处理右边
}
public static boolean greater(Comparable i,Comparable j){
return i.compareTo(j) > 0;
}
public static void wrap(Comparable[] a,int i,int j){
Comparable temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
package com.上机.ch06;
// 冒泡排序
public class Bubble {
public static void BubbleSort(Comparable[] a){
for(int i = a.length - 1;i > 0;i--){
for(int j = 0;j < i;j++){
if(greater(a[j],a[j+1])) wrap(a,j,j+1);
}
}
}
/**
* 比较元素v是否大于元素w
* @param v
* @param w
* @return
*/
public static boolean greater(Comparable v,Comparable w){
return v.compareTo(w) > 0;
}
/**
* 数组元素i和j换位置
* @param a
* @param i
* @param j
*/
public static void wrap(Comparable[] a,int i,int j){
Comparable temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
package com.上机.ch06;
public class Insertion {
// 插入排序
public static void InsertionSort(Comparable[] a){
for(int i =