排序

(1)冒泡排序

1.思路:

两重循环,

第一重循环表示需要比较哪些数据,(因为最大的放在最后面,就不用比了;次大的放在倒数第二个,也不用比了)

第二重循环表示从第0个开始比较,直至那个数据

        2.代码

<span style="white-space:pre">		</span>int[] test = new int[]{34,23,67,56,78,43,63,28};
		for(int i=test.length-1; i>0; i--) //第一次肯定连最后一个也要比较,所以开始为最后一个的下标;如果未比较的只剩一个,那么就不用比较了
		{
			for(int j=0; j<i; j++)//从第一个开始,比较到最后一个未确定位置的
			{ 
				if(test[j]>test[j+1])
				{
					int temp = test[j];
					test[j] = test[j+1];
					test[j+1] = temp;
				}		
			}
		}

(2)快速排序

          1.思路

                    1)调整区间,以第一个元素为标识flag,从尾部向前比较,如果a[end]<flag,则end--,否则a[end]赋值给之前挖的坑(即为a[begin]),同时从begin开始比较,如果a[begin]<flag,则begin++,否则a[begin]>=flag,则a[begin]赋值给之前挖的坑(即为a[end]),再从end位置重复该过程,直至begin>=end,最后将flag赋值给begin、end相遇的地方

                    2)根据flag分开的两个区间,对这两个区间进行如上调整

                    3)注意:只有在比较元素的时候含=,其余均为>或<

         2.代码

	private static void quick_sort(int[] a, int begin, int end)
	{
		if(begin<end)
		{
			int mid = adjust(a, begin, end);
			quick_sort(a, begin, mid-1);
			quick_sort(a, mid+1, end);
		}
	}
	
	private static int adjust(int[] a, int begin, int end) 
	{
		int flag = a[begin];
		
		while(begin<end)
		{
			while(begin<end && a[end]>=flag)
				end--;
			if(begin<end)
				a[begin] = a[end];
			
			while(begin<end && a[begin]<=flag)
				begin++;
			if(begin<end)
				a[end] = a[begin];
		}
		
		a[begin] = flag;
		
		return begin;
	}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值