拜谢了

解决方案 »

  1.   

    public class Sort { public static void swap(int[] data, int i, int j) {
    int tmp = 0;
    tmp = data[i];
    data[i] = data[j];
    data[j] = tmp;
    } // 插入排序
    public static void sort1(int[] data) {
    for (int i = 1; i < data.length; i++) {
    for (int j = i; (j > 0) && (data[j] < data[j - 1]); j--) {
    swap(data, j, j - 1);
    }
    }
    } // 冒泡排序
    public static void sort2(int[] data) {
    for (int i = 0; i < data.length; i++) {
    for (int j = data.length - 1; j > i; j--) {
    if (data[j] < data[j - 1]) {
    swap(data, j, j - 1);
    }
    }
    }
    } // 选择排序
    public static void sort3(int[] data) {
    for (int i = 0; i < data.length; i++) {
    int lowIndex = i;
    for (int j = data.length - 1; j > i; j--) {
    if (data[j] < data[lowIndex]) {
    lowIndex = j;
    }
    }
    swap(data, i, lowIndex);
    }
    } // Shell排序
    public static void sort4(int[] data) {
    for (int i = data.length / 2; i > 2; i /= 2) {
    for (int j = 0; j < i; j++) {
    for (int k = i; (k > 0) && (data[k] < data[k - 1]); k -= i) {
    swap(data, j, j - 1);
    }
    }
    } } // 快速排序
    public static void sort5(int[] data) {
    quickSort(data, 0, data.length - 1);
    } private static void quickSort(int[] data, int i, int j) {
    int pivotIndex = (i + j) / 2;
    swap(data, pivotIndex, j); int k = partition(data, i - 1, j, data[j]);
    swap(data, k, j);
    if ((k - i) > 1)
    quickSort(data, i, k - 1);
    if ((j - k) > 1)
    quickSort(data, k + 1, j); } private static int partition(int[] data, int l, int r, int pivot) {
    do {
    while (data[++l] < pivot)
    ;
    while ((r != 0) && data[--r] > pivot)
    ;
    swap(data, l, r);
    } while (l < r);
    swap(data, l, r);
    return l;
    } // 归并排序
    public static void sort6(int[] data) {
    int[] temp = new int[data.length];
    mergeSort(data, temp, 0, data.length - 1);
    } private static void mergeSort(int[] data, int[] temp, int l, int r) {
    int mid = (l + r) / 2;
    if (l == r)
    return;
    mergeSort(data, temp, l, mid);
    mergeSort(data, temp, mid + 1, r);
    for (int i = l; i <= r; i++) {
    temp[i] = data[i];
    }
    int i1 = l;
    int i2 = mid + 1;
    for (int cur = l; cur <= r; cur++) {
    if (i1 == mid + 1)
    data[cur] = temp[i2++];
    else if (i2 > r)
    data[cur] = temp[i1++];
    else if (temp[i1] < temp[i2])
    data[cur] = temp[i1++];
    else
    data[cur] = temp[i2++];
    }
    } // 堆排序
    public static void sort7(int[] data) {
    MaxHeap h = new MaxHeap();
    h.init(data);
    for (int i = 0; i < data.length; i++)
    h.remove();
    System.arraycopy(h.queue, 1, data, 0, data.length);
    } private static class MaxHeap { void init(int[] data) {
    this.queue = new int[data.length + 1];
    for (int i = 0; i < data.length; i++) {
    queue[++size] = data[i];
    fixUp(size);
    }
    } private int size = 0; private int[] queue; public int get() {
    return queue[1];
    } public void remove() {
    swap(queue, 1, size--);
    fixDown(1);
    } // fixdown
    private void fixDown(int k) {
    int j;
    while ((j = k << 1) <= size) {
    if (j < size && queue[j] < queue[j + 1])
    j++;
    if (queue[k] > queue[j]) // 不用交
    break;
    swap(queue, j, k);
    k = j;
    }
    } private void fixUp(int k) {
    while (k > 1) {
    int j = k >> 1;
    if (queue[j] > queue[k])
    break;
    swap(queue, j, k);
    k = j;
    }
    } }}
      

  2.   

    我也来一个,是要这个吗?public class RootOfAnEquation {
        
        /** Creates a new instance of RootOfAnEquation */
        public RootOfAnEquation() {
        }
        
        //计算函数的值
        static double Calculate(double x){
            double x1 = 3*x*x*x - 5*x + 4; // 此处为待解方程的表达式
            return x1;
        }
        
        //计算x处的导数,增量h
        static double diff(double x, double h){
            return (Calculate(x+h)-Calculate(x))/h;
        }
        
        public static void main(String[] args){
            
            double start = -5;  //起始的x值
            double interval = 0.0001; // 计算导数时使用的x的增量,
            double xn=start,xn_1=xn+1;
            int i=1;
            System.out.println("次数  x                        y");
            //System.out.println(i + " --- " + xn + "  ---  " + Calculate(xn));
            while (Math.abs(xn-xn_1)>0.0000001){
                xn = xn_1;
                xn_1 = xn - Calculate(xn)/diff(xn,interval); // 牛顿迭代公式
                System.out.println(i + " --- " + xn + "  ---  " + Calculate(xn));
                i++;
                if (i>10000) {
                    System.out.println("Sorry, I can't found any root of that equation for 10000 times.");
                    break;
                }
            }
        }
    }