第三周__冒泡排序和归并排序

来源:互联网 发布:农副产品交易网软件 编辑:程序博客网 时间:2024/06/04 18:00

冒泡排序
package bbb;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;

public class MP {
    public static void main(String[] args) {

       ArrayList arraylist = new ArrayList();
        try {
            long startTime, endTime;
            int readNum;
           
            FileReader f = new FileReader("D:/largeW.txt");
            BufferedReader br = new BufferedReader(f);

           String line = br.readLine();
            while (line != null) {
                readNum = Integer.parseInt(line.trim());
                arraylist.add(readNum);
                line = br.readLine();
            }
            int array[] = new int[arraylist.size()];

           for (int i = 0; i < array.length; i++) {
                array[i] = (Integer) arraylist.get(i);
            }
           
            startTime = System.currentTimeMillis();
            System.out.println(startTime);
           
            BubbleSort(array);
           
            endTime = System.currentTimeMillis();
            System.out.println(endTime);
            System.out.println((endTime - startTime) / 1000 + "秒");
           
            FileWriter w = new FileWriter("D:/largeW.txt");
            BufferedWriter bw = new BufferedWriter(w);

           String str;
            for (int i = 0; i < array.length; i++) {
                str = String.valueOf(array[i]);
                bw.write(str);
                bw.newLine();
            }
            bw.flush();
            bw.close();
            br.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
   
    public static void BubbleSort(int[] arr) {

       int change;
        for (int i = 1; i <= arr.length - 1; i++) {
            for (int j = 0; j < arr.length - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    change =  arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = change;
                }
            }
        }
    }
}

 

归并排序
package bbb;

 import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.FileReader;
 import java.io.FileWriter;
 import java.util.ArrayList;
 
public class longint {
 
    public static void main(String[] args) {
         try {
             long firstTime, endTime;
             int readNum;
            
             FileReader f = new FileReader("D:/largeW.txt");
             BufferedReader br = new BufferedReader(f);
            
             ArrayList arraylist = new ArrayList();
             String line = br.readLine();
             while (line != null) {
                 readNum = Integer.parseInt(line.trim());
                 arraylist.add(readNum);
                 line = br.readLine();
             }
            
             int array[] = new int[arraylist.size()];
             int arrayFnish[] = new int [arraylist.size()];
            
             for(int i=0;i<array.length;i++){
                 array[i] = (Integer) arraylist.get(i);
             }   
             firstTime = System.currentTimeMillis();
             System.out.println("归并开始的时间"+firstTime);   
            
             mergeSort(array,arrayFnish,array.length-1);
 
            endTime = System.currentTimeMillis();
             System.out.println("归并结束的时间"+endTime);
             System.out.println("归并排序所花费的时间:"+(endTime - firstTime)/1000.0+"秒");
            
                    
             FileWriter ww = new FileWriter(
                     "D:/largeW_sort.txt");
             BufferedWriter wMerge = new BufferedWriter(ww);
 
            String str;
             for (int i = 0; i < array.length; i++) {
                 str = String.valueOf(array[i]);
                 wMerge.write(str);
                 wMerge.newLine();
             }
            
             wMerge.flush();
             wMerge.close();
             br.close();
         } catch (Exception e) {
             e.printStackTrace();
         }
     }   
    
     public static void mergePass(int sourceArray[],int destArray[],int n,int h){
         int i = 0;
         while( i<= n-2*h){
             merge(sourceArray,destArray,i,i+h-1,i+2*h-1);
             i += 2*h;
         }
         if(i<n-h){
             merge(sourceArray,destArray,i,i+h-1,n);
         }else{
             for(int k=i;k<=n;k++){
                 destArray[k] = sourceArray[k];
             }
         }
     }
    
     private static void mergeSort(int[] sourceArray,int destArray[],int n) {
         int h = 1;
         while(h<n){
             mergePass(sourceArray,destArray,n,h);
             h = 2*h;
             mergePass(destArray,sourceArray,n,h);
             h = 2*h;
         }
     }   
     private static void merge(int[] sourceArray,int destArray[],
             int first, int mid, int last) {  
         int i = first;
         int j = mid + 1;
         int k=first;
        
         while(i <= mid && j <= last) {
             if (sourceArray[i] <= sourceArray[j])
                destArray[k++] = sourceArray[i++];
             else
                 destArray[k++] = sourceArray[j++];
         }
            
         while (i <= mid) {
             destArray[k++] = sourceArray[i++];
         }
            
         while ( j <= last ) {
             destArray[k++] = sourceArray[j++];
         }
     }
 
}

0 0