面试中常常问的三种简单排序方法

/**
 * 三种简单的排序
 * 本类中全部举例都是依照从小到大进行排序
 * @author caohaicheng
 * @time   2014-07-24
 */
public class SortDemo {
	//int[] score={7,10,35,21,78,2,1,9};
	public static void main(String[] args) {
		SortDemo sd=new SortDemo();
		System.out.println("*********************************冒泡排序**********************************");
		//冒泡排序
		sd.BubbleSort();

		System.out.println("*********************************选择排序**********************************");
		//选择排序
		sd.selectSort();

		System.out.println("*********************************插入排序**********************************");
		//插入排序
		sd.insertSort();
	}

	/**
	 * 冒泡排序:循环进行相邻的两个数比較,然后依据规则决定是否调换位置
	 */
	private  void BubbleSort() {
		int[] score={7,10,35,21,78,2,1,9};
		for(int i=1;i<score.length;i++){	//最多比較N-1次,每比較一轮就将所參与比較的数的最大值蠕动到这些数的最后面
			/*
			 * 第二次循环的j非常关键,由于当第一轮比較结束,数组中的最大的那个值已经被放到最后一位了
			 * 第二轮的时候就不须要最后一个数字參与比較了,比較结束倒数第二大的数放在倒数第二的位置了
			 * 依次类推 ,最多比較N-1次就能够全部排序好。
			 */
			for(int j=0;j<score.length-i;j++){
				if(score[j]>score[j+1]){
					//两个元素互换位置
					int temp=score[j];
					score[j]=score[j+1];
					score[j+1]=temp;
				}
			}
			System.out.print("冒泡排序第"+i+"次排序结果:");
			for(int k=0;k<score.length;k++){
				System.out.print(score[k]+"\t");
			}
			System.out.println();
		}
		System.out.print("冒泡排序终于排序的结果:");
		for(int i=0;i<score.length;i++){
			System.out.print(score[i]+"\t");
		}
		System.out.println();
	}

	/**
	 * 选择排序:顺序依次取出一个数与它后面的全部数进行比較,找出最小的然后交换位置
	 * 冒泡排序是跟相邻的两两比較,发现比他小就交换位置; 而选择排序是跟全部的都比較之后,确定了哪个最小,再交换位置
	 *
	 */
	private void selectSort(){
		int[] score={7,10,35,21,78,2,1,9};
		for(int i=0;i<score.length-1;i++){//没循环依次就找到了一个最小值,最多循环N-1次
			int minIndex=i;
			for(int j=i+1;j<score.length;j++){//跟后面的全部数进行比較,找出那个最小的
				if(score[minIndex]>score[j]){
					minIndex=j;//找到最小值的下标了
				}
			}

			//交换位置
			int temp=score[minIndex];
			score[minIndex]=score[i];
			score[i]=temp;

			System.out.print("选择排序第"+i+"次排序结果:");
			for(int k=0;k<score.length;k++){
				System.out.print(score[k]+"\t");
			}
			System.out.println();

		}
		System.out.print("选择排序终于排序的结果:");
		for(int i=0;i<score.length;i++){
			System.out.print(score[i]+"\t");
		}
		System.out.println();
	}

	/**
	 * 插入排序:跟玩扑克牌的时候抓牌"码牌"相似,我们抓第一张牌不用排序,第二张牌要与第一张牌进行比較,假设小于第一张牌,那么就
	 * 将第一张牌移动到第2的位置上
	 * 以后依次抓牌,与手牌从前往后依次比較,当发现小于某张手牌的时候就将抓到的牌放在该位置,该位置后的牌依次后移。
	 *
	 */
	private void insertSort(){
		int[] score={7,10,35,21,78,2,1,9};
		for(int i=1;i<score.length;i++){
			int temp=score[i];
			int j=i-1;
			while(j>=0 && score[j]>temp ){
				score[j+1]=score[j];
				j--;
			}
			score[j+1]=temp;
		}
		System.out.print("插入排序终于排序的结果:");
		for(int i=0;i<score.length;i++){
			System.out.print(score[i]+"\t");
		}
		System.out.println();
	}  

}
时间: 2024-10-29 00:56:35

面试中常常问的三种简单排序方法的相关文章

算法:三种简单排序算法

排序算法比较常见的有:冒泡排序.简单选择排序.直接插入排序:希尔排序.堆排序.归并排序和快速排序算法等.今天先学习一下前面三种比较简单的算法.排序的相关概念: ①排序的稳定性:两个或多个元素相等,排序过后仍然是原来的顺序则为稳定排序. ②内部排序:排序过程都在内存中进行:外部排序:需要对外存进行访问的排序过程. ③内排序算法性能因素:1.时间性能,比较与移动:2.辅助空间:3.算法复杂性 实例:冒泡排序.简单选择排序与直接插入排序 #include "stdio.h" #define

三种简单排序(之一)——(冒泡排序)

1.简介:     在学习技能的过程中,没有哪一种技术是最好的!在不同的情况下,不同的技术会有不同优势! 冒泡排序的基本思想是:每次比较两个相邻元素,如果它们的顺序错误就把它们交换位置: 下面通过图简单来看看“冒泡排序” 所谓冒泡排序就是这样,小的数往上浮,大的数往下沉! 2.冒泡排序: 代码: 1 static void Main(string[] args) 2 { 3 int[] arr = { 1, 5, 2, 7, 3 }; 4 foreach (int item in bubble(

用jsonp来解决跨域问题的三种简单的方法

jsonp实现跨域的方法 使用ajax方法获取数据不能跨域,为了解决这个问题,普遍使用jsonp来实现跨域,下面是对jsonp方法的简单总结: 例子:假如想获取京东的评论的数据,可以在京东的评论面板打开network找到和ajax请求相关的有回调函数callback的请求url, 如找到一个url, 如: 在响应里可以找到回调函数对应的方法: 这是在服务器上写入的方法用来传输数据. 例如获取到的url为 https://club.jd.com/comment/productPageComment

三种简单排序

1.冒泡排序 冒泡排序是一种简单的排序算法,其基本思想如下: 1)从第一个开始起,比较相邻的两个元素的大小,如果前一个比后一个大,则进行交换(也就是小的冒上去). 2)然后再和之前相邻元素进行比较,若小,则冒上去. 2)重复以上操作,直到最后一个元素. 1 public static void BubbleSort(long[] arr){ 2 long tmp = 0; 3 for(int i=0;i<arr.length-1;i++){ 4 for(int j=arr.length-1;j>

数组的三种随机排序方法

第一种.利用数组自带的sort方法(下面是完整代码) 这种方法是利用随机出一个正数或者负数来让数组里面的内容两两对比,是正数就是顺序,是负数则是倒序,这种方法的缺点就是随机性不高,不能完全随机,因为是两两对比,所以最后一个数在最后的可能性较大. 第二种.利用递归函数对比(下面是完整代码) 递归的方法是利用递归函数的自调,定义一个随机数index(因为定了向下取整,所以范围为0~8)作为随机下标,然后将它对应的数从数组中取下压入到result数组中,从而实现随机排序,定义if判断,如果cloneA

关于三种简单排序的操作

一.关于插入排序的一些想法与实现,插入排序的原理是在序列前增加一个哨兵,通过哨兵的值与前面比较,如果需要改变的话直接覆盖掉与哨兵值的位置,最后可以将哨兵填充到新的空缺位置,按照排序的定义意思就是直接在新的列表前直接补一个索引为0的位置填充一个零nums=[1,9,8,5,6,7,4,3,2]nums=[0]+numslength=len(nums)for i in range(2,length):nums[0]=nums[i]j=i-1if nums[j]>nums[0]:while nums[

三种简单排序算法(java实现)

一.冒泡排序 算法思想:遍历待排序的数组,每次遍历比较相邻的两个元素,如果他们的排列顺序错误就交换他们的位置,经过一趟排序后,最大的元素会浮置数组的末端.重复操                   作,直到排序完成. 示例演示: 算法实现: 1 for(int i=0;i<array.length-1;i++){//最多排序n-1次 2 for(int j=0;j<array.length-i-1;j++){//需要交换的次数 3 if(array[j]>array[j+1]){ 4 i

文顶顶 iOS开发UI篇—iOS开发中三种简单的动画设置

iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所

iOS开发UI篇—iOS开发中三种简单的动画设置

iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView beginAnimations:nil context:nil]; //设置动画时长 [UIView setAnimationDuration:2.0]; self.headImageView.bounds = rect; // commitAnimations,将beginAnimation之后的所