Ch2_InsertSort
Ch2_MergeSort
Ch2_Exercise2_3_4
Ch2_Exercise_2_3_7
package algorithms;
// 插入排序
public class Ch2_InsertSort
{
public void insertsort(int[] data, int data_length)
{
for (int j = 2; j <= data_length; j++)
{
int key = data[j];
int i = j - 1;
for (; i > 0 && data[i] > key; i--)
data[i + 1] = data[i];
data[i + 1] = key;
}
}
public static void main(String[] args)
{
int[] data = new int[] { 0, 1, 5, 1, 5, 6, 0, 7, 0, 2, 7, 3 }; // 数组从序号1开始,0号位置放一个占位数字0,输出数组时,忽略0号位置,从1开始输出
Ch2_InsertSort sort = new Ch2_InsertSort();
sort.insertsort(data, data.length - 1);
for (int temp = 1; temp <= data.length - 1; temp++)
{
System.out.print(data[temp]);
System.out.print(" ");
}
}
}
Ch2_MergeSort
package algorithms;
// 利用分治法(即递归)实现合并排序
public class Ch2_MergeSort
{
public void mergesort(int[] data, int p, int r)
{
if (p < r)
{
int q = (p + r) / 2;
mergesort(data, p, q);
mergesort(data, q + 1, r);
merge(data, p, q, r);
}
}
public void merge(int[] data, int p, int q, int r)
{
int n1 = q - p + 1;
int n2 = r - q;
int[] L = new int[n1 + 1];
int[] R = new int[n2 + 1];
for (int i = 1; i <= n1; i++)
L[i] = data[p + i - 1];
for (int i = 1; i <= n2; i++)
R[i] = data[q + i];
for (int k = p, i = 1, j = 1; k <= r; k++)
{
if (i <= n1 && j <= n2)
data[k] = (L[i] < R[j] ? L[i++] : R[j++]);
else
data[k] = (i <= n1 ? L[i++] : R[j++]);
}
}
public static void main(String[] args)
{
Ch2_MergeSort sort = new Ch2_MergeSort();
int[] data = new int[] { 0, 1, 5, 1, 5, 6, 0, 7, 0, 2, 7, 3 }; // 数组从序号1开始,0号位置放一个占位数字0,输出数组时,忽略0号位置,从1开始输出
sort.mergesort(data, 1, data.length - 1);
for (int temp = 1; temp <= data.length - 1; temp++)
{
System.out.print(data[temp]);
System.out.print(" ");
}
}
}
Ch2_Exercise2_3_4
package algorithms;
// 递归版本的插入排序
public class Ch2_Exercise2_3_4
{
public void insertsort_recrusive(int[] data, int p, int r)
{
if (r > 2)
insertsort_recrusive(data, 1, r - 1);
int key = data[r];
int i = r - 1;
for (; data[i] > key && i >= 1; i--)
data[i + 1] = data[i];
data[i + 1] = key;
}
public static void main(String[] args)
{
int[] data = new int[] { 0, 1, 5, 1, 5, 6, 0, 7, 0, 2, 7, 3 };
Ch2_Exercise2_3_4 sort = new Ch2_Exercise2_3_4();
sort.insertsort_recrusive(data, 1, data.length - 1);
for (int i = 1; i < data.length - 1; i++)
{
System.out.print(data[i]);
System.out.print(" ");
}
}
}
Ch2_Exercise_2_3_7
package algorithms;
public class Ch2_Exercise_2_3_7
{
public boolean findsum(int[] data, int x)
{
for (int i = 1; i < data.length - 1; i++)
for (int j = i + 1; j < data.length - 1; j++)
if (data[i] + data[j] == x)
return true;
return false;
}
public static void main(String[] args)
{
int[] data = new int[] { 0, 1, 5, 1, 5, 6, 0, 7, 0, 2, 7, 3 };
Ch2_Exercise_2_3_7 sum=new Ch2_Exercise_2_3_7();
int x=6;
if(sum.findsum(data, x))
System.out.println("exist");
else
System.out.println("not exist");
}
}