编程语言
首页 > 编程语言> > 面试常用排序算法

面试常用排序算法

作者:互联网

冒泡排序

基本思路:

两两比较相邻记录的数,如果反序则交换,直到没有反序的记录为止。

代码实现要点:

优化:如果一趟排序后也没有交换位置,那么该数组已有序~

public void bubble_sort(int srr[]) {
		
		boolean flag = true;
		for (int i = 0; i < srr.length && flag; i++) {
			
			flag = false;	//一轮下来没有交换,说明已经排好,退出循环
			for(int j = srr.length-1; j >i; j--) {
			    if(srr[j] < srr[j-1]) {
                  	      int temp = srr[j];	//交换
                              srr[j] = srr[j-1];
                              srr[j-1] = temp;
                  
			      flag = true;
			    }
			}
		}	
	}

选择排序

基本思路:

思路和冒泡排序差不多,先选择最小(或最大)值,再放入指定的位置

public void select_sort(int arr[]) {
		
		int min;
		for (int i = 0; i < arr.length-1; i++) {
		    min = i;
		    for (int j = i+1; j < arr.length; j++) {
			if(arr[min] > arr[j]) {	//每次和标记的最小值相比
			    min = j;
			}
		    }
		    if(min != i) {
                       int temp = arr[min];	//交换
                       arr[min] = arr[i];
                       arr[i] = temp;
		    }
		}
		
	}

插入排序

思路:

public void insertSort(int ins[]) {

		int i,j,temp;
		for (i = 1; i < ins.length; i++) {
			temp = ins[i]; // 保存每次需要插入的那个数
			
			for (j = i; j > 0 && ins[j - 1] > temp; j--) { // 优化:若比有序数组最大值还大,则不动
				ins[j] = ins[j - 1]; // 把大于需要插入的数往后移动。最后不大于temp的数就空出来j
			}
			ins[j] = temp; // 将需要插入的数放入这个位置
		}

	}

快速排序

基本思路

public static void quickSort1(int[] items,int L, int R){

        int i = L;
        int j = R;

        //支点
        int chosenItem = items[(L+R)/2];

        while (i <= j){

            //从左边开始寻找直到比支点大的数
            while (chosenItem > items[i]){
                i++;
            }
            //从右边开始寻找直到比支点小的数
            while (chosenItem < items[j]){
                j--;
            }

            if (i <= j){
                //交换
                int temp = items[i];
                items[i] = items[j];
                items[j] = temp;

                i++;
                j--;
            }
        }

        //“左边”再做排序,直到左边剩下一个数(递归出口)
        if (L < j){
            quickSort1(items,L,j);
        }
        //“右边”再做排序,直到右边剩下一个数(递归出口)
        if (i < R){
            quickSort1(items,i,R);
        }
    }

标签:arr,temp,min,int,ins,srr,面试,算法,排序
来源: https://www.cnblogs.com/luler/p/14533240.html