简单排序

排序算法的分类如下:

 

1.插入排序(直接插入排序、折半插入排序、希尔排序);

2.交换排序(冒泡排序、快速排序);
* 3.选择排序(直接选择排序、堆排序);

 4.归并排序;

 5.基数排序。

 

这里讲简单排序(冒泡排序、选择排序、插入排序)

 

 

冒泡排序:

   相邻两元素进行比较,如有需要则进行交换,每完成一次循环就将最大元素排在最后(如从小到大排序),下一次循环是将其他的数进行类似操作。

 

性能方面:比较次数O(n^2),n^2/2;

              交换次数O(n^2),n^2/4

public static void swap(int one ,int two){
		long temp = a[one];
		a[one] = a[two];
		a[two] = temp;
		
	}

 

public static void bubbleSort(long [] a){
		int out , in;
		for (out = a.length-1; out>1 ; out--){  // 这重循环是比较的轮数
			
			//比较的次数
			for (in = 0; in < out; in++ ){
				if (a[in]>a[in+1])
				swap(in, in+1);
			}
		}
		
	}

 

 

选择排序:

 

在未排序的数中,选中一个数(currn)作为标记,与下一个数 (next) 作为比较,如果 next 小于 currn,则取消该数的标记,把标记赋于 next ,再用这个next 去比较另一个数,如此反复直到所有的数比完,标记出最小的那个数再把这最小的数最第一个数进行交换

 

性能方面:比较次数O(n^2),n^2/2 交换次数O(n),n

 

/**
	 * 选择排序
	 * @param a
	 */
	public static void selectSort(long []a){
	   int out ,in ,min;
	   
	   for (out = 0; out<a.length -1; out++){
		   min = out;
		   
		   for (in = out+1 ;in<a.length ;in++){
			   if (a[min] > a[in]){
				   min = in;
			   }
		   }
		   
		swap(out, min);
		   
	   }
	}

 

 

插入排序:

 

   将一个记录插入到已排好序的有序表(有可能是空表)中,从而得到一个新的记录数增1的有序表

 

 性能:复制次数O(n),n^2/4 比较次数是前两者的一般

/**
	 * 插入排序
	 * @param a
	 */
	public static void insertSort(long [] a){
		
		int length = a.length;
		int out , in  ;
		
		for (out = 1; out < length ; out++){
		   long temp = a[out];  //后面排序的第一个数
		   in = out;
		   
		   while (in > 0 && a[in -1] >= temp){
			   
			   a[in] = a[in-1];  //in 这项数据后右移动
			   in -- ;
		   }
		   
		   a[in] = temp;
			
		}
		
	}

 

三者排序之间的比较:

  

选择排序与冒泡排序:

     交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CUP时间多,所以选择排序比冒泡排序快。
* 但是N比较大时,比较所需的CPU时间占主要地位,所以这时的性能和冒泡排序差不太多,但毫无疑问肯定要快些。

 

插入排序:复制所需的CPU时间较交换少,所以性能上比冒泡排序提高一倍多,而比选择排序也要快。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值