面试时复习的几个排序算法_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 面试时复习的几个排序算法

面试时复习的几个排序算法

 2013/8/31 19:09:22  sunshine_beach  程序员俱乐部  我要评论(0)
  • 摘要:前段时间面试时复习的几个排序算法。一、冒泡排序:packagecom.sort.test;publicclassBubbleSortTest{publicstaticvoidmain(String[]args){int[]data5=newint[]{5,3,6,2,1,9,4,8,7};print(data5);bubbleSort(data5);System.out.println("排序后的数组:");print(data5);}publicstaticvoidswap
  • 标签:面试 复习 算法
前段时间面试时复习的几个排序算法
一、冒泡排序
class="java">
package com.sort.test;

public class BubbleSortTest {
	public static void main(String[] args) {
		int[] data5 = new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7 };
		print(data5);
		bubbleSort(data5);
		System.out.println("排序后的数组:");
		print(data5);
	}

	public static void swap(int[] data, int i, int j) {
		if (i == j) {
			return;
		}
		data[i] = data[i] + data[j];
		data[j] = data[i] - data[j];
		data[i] = data[i] - data[j];
	}

	public static void bubbleSort(int[] data) {
		for (int i = 0; i < data.length - 1; i++) {
			// 记录某趟是否发生交换,若为false表示数组已处于有序状态
			boolean isSorted = false;
			for (int j = 0; j < data.length - i - 1; j++) {
				if (data[j] > data[j + 1]) {
					swap(data, j, j + 1);
					isSorted = true;
					print(data);
				}
			}
			if (!isSorted) {
				// 若数组已处于有序状态,结束循环
				break;
			}
		}
	}

	public static void print(int[] data) {
		for (int i = 0; i < data.length; i++) {
			System.out.print(data[i] + "\t");
		}
		System.out.println();
	}
}


二、快速排序
package com.sort.test;


public class QuickSortTest {

	private static int partition(int[] data, int i, int j) {
		int pivot = data[i];
		while (i < j) {
			while (i < j && data[j] >= pivot) 
				--j;
			data[i] = data[j];
			while (i < j && data[i] <= pivot) 
				++i;
			data[j] = data[i];
		}
		data[i] = pivot;
		
		return i;
	}
	
	public static void quickSort(int[] data, int i, int j) {
		if (i < j) {
			int pivotLoc = partition(data, i, j);
			quickSort(data, i, pivotLoc - 1);
			quickSort(data, pivotLoc + 1, j);
		}
	}
	
	public static void main(String[] args) {
		int[] data = new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7 };
		print(data);
		quickSort(data, 0, data.length - 1);
		System.out.println("排序后的数组:");
		print(data);

	}
	
	public static void print(int[] data) {
		for (int i = 0; i < data.length; i++) {
			System.out.print(data[i] + "\t");
		}
		System.out.println();
	}
}



三、选择排序:
package com.sort.test;

/**
 * 选择排序
 * @author Administrator
 *
 */
public class SelectSortTest {

	public static void main(String[] args) {
		int[] data = new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7 };
		print(data);
		selectSort(data);
		print(data);
	}
	
	public static void swap(int[] data, int i,int j) {
		if (i == j) {
			return;
		}
		data[i] = data[i] + data[j];
		data[j] = data[i] - data[j];
		data[i] = data[i] - data[j];
	}
	
	public static void selectSort(int[] data) {
		for (int i = 0; i < data.length - 1; i++) {
			int minIndex = i;//记录最小值的索引
			for (int j = i + 1; j < data.length; j++) {
				if (data[j] < data[minIndex]) {
					minIndex = j;
				}
			}
			
			if (minIndex != i) {
				swap(data, i, minIndex);
				print(data);
			}
		}
	}
	
	public static void print(int[] data) {
		for (int i = 0; i < data.length; i++) {
			System.out.print(data[i] + "\t");
		}
		System.out.println();
	}
}

发表评论
用户名: 匿名