算法分析与设计——快排和插入排序的实现


import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;


public class sort {
	public static void datagentare()
	{
//		create the number of 2k data
		int[] arry = new int[2000];
		for(int i = 0;i < arry.length;i++)
		{
			arry[i]=(int)Math.floor(1000*Math.random())+1;
			//System.out.println(arry[i]);
		}
//		save data
		File file = new File("/Users/emily/Documents/arry2.txt");
		try {
			FileWriter out = new FileWriter(file);
			for(int j = 0;j < 2000; j++)
			{
				out.write(arry[j]+"\n");
			}
			out.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
	public static int[] Data(String file_path){  //read data
		int[] data = new int[2000];
		File file = new File(file_path);
		if(file.isFile() && file.exists())
//			�ж��ļ��Ƿ����
		{
			InputStreamReader read;
			try {
				read = new InputStreamReader(new FileInputStream(file));
				BufferedReader bufferedReader = new BufferedReader(read);
				for(int i = 0 ; i< 2000 ; i++)
				{
					try {
						data[i] = Integer.parseInt( bufferedReader.readLine());
					} catch (NumberFormatException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
//		for(int j = 0;j < 2000; j++)
//		{
//			System.out.println(data[j]);
//		}
//		
		return data;
	}
	private static int partition(int[] array,int beg,int end){  
        int last = array[end];  
        int i = beg -1;  
        for (int j = beg; j <= end-1; j++) {  
            if(array[j] <= last){  
                i++;  
                if(i != j){  
                    array[i] = array[i]^array[j];  
                    array[j] = array[i]^array[j];  
                    array[i] = array[i]^array[j];  
                }  
            }  
        }  
        if((i+1) != end){  
            array[i+1] = array[i+1]^array[end];  
            array[end] = array[i+1]^array[end];  
            array[i+1] = array[i+1]^array[end];  
        }  
        return i+1;  
    }
	
	public static void quickSort(int[] array)
	{  
        if(array != null){  
            quickSort(array, 0, array.length-1);  
        }  
    }  
      
    private static void quickSort(int[] array,int beg,int end)
    {  
        if(beg >= end || array == null)  
            return;  
        int p = partition(array, beg, end);  
        quickSort(array, beg, p-1);  
        quickSort(array, p+1, end);  
    }
    public static void insertSort(int a[]){  
        int length=a.length; //数组长度  
        int j;               //当前值的位置  
        int i;               //指向j前的位置  
        int key;             //当前要进行插入排序的值  
        //从数组的第二个位置开始遍历值  
        for(j=1;j<length;j++){  
            key=a[j];  
            i=j-1;  
            //a[i]比当前值大时,a[i]后移一位,空出i的位置,好让下一次循环的值后移  
            while(i>=0 && a[i]>key){  
                a[i+1]=a[i]; //将a[i]值后移  
                i--;         //i前移  
            }//跳出循环(找到要插入的中间位置或已遍历到0下标)  
            a[i+1]=key;    //将当前值插入  
        }  
    }  
    public static void main(String args[])
    {
    	int[] test = new int[2000];
    		datagentare();
    		test = Data("/Users/emily/Documents/arry2.txt");
//    		quickSort(test);
    		insertSort(test);
    		for(int i = 0 ; i< 2000 ; i++)
    		{
    			System.out.println(test[i]);
    		}
    		File file = new File("/Users/emily/Documents/Sort_out.txt");
    		try {
    			FileWriter out = new FileWriter(file);
    			for(int j = 0;j < 2000; j++)
    			{
    				out.write(test[j]+"\n");
    			}
    			out.close();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值