排序算法的回顾

今天打算带竹子回顾一下之前在数据结构里学习的一些算法,平常的一些资料都是写在word里发给竹子看,今天突然想写在博客然后再发给竹子吧。
1,冒泡排序
首先说一下算法的基本思想:从前往后,依次比较相邻的两个数,把较大的数放到后面。一次循环,可以在当前最末尾位置得到一个当前最大值。
这个应该是大家都清楚的一个排序算法了,所以直接贴上代码:

	public static void Bubble(int []arrays)
	{
		int i,j;
		for(i=0;i<arrays.lenth-1;i++)
		{
			for(j=0;j<arrays.lenth-1-i;j++)
			{
				if(arrays[j]>arrays[j+1])
				{
					int temp = arrays[j+1];
					arrays[j+1] = arrays[j];
					arrays[j] = temp;
					
				}
					
			}
		
	}
}

2,选择排序
还是先说一下基本的思想:从数组中找到最小的元素,和第一个位置的元素互换。 从第二个位置开始,找到最小的元素,和第二个位置的元素互换。 直到选出array.length-1个较小元素,剩下的最大的元素自动排在最后一位。
举个例子:
有一个数字{33,45,13,38,79,23}
首先我们找到最小的元素13,然后跟数组的第一个位置的元素做交换:{13,45,33,38,79,23},所以我们现在的数组第一个位置放的就是最小的了
然后找到第二小的元素23,然后跟数组第二个位置的元素做交换:{13,23,33,38,79,45}
然后以此类推…
下面贴代码:

public static void choose(int []arrays)
	{
		for(int i=0;i<arrays.length-1;i++)
		{
			int min = i;
			for(int j=i;j<arrays.length;j++)
			{
				if(arrays[min]>arrays[j])
					min = j;
			}
			if(arrays[i]!=arrays[min])
			{
				int temp = arrays[i];
				arrays[i] = arrays[min];
				arrays[min] = temp;
			}
				
		}
	}
}

3,插入排序
还是先说一下基本思想:将一个记录插入到已排好序的序列中,从而得到一个新的有序序列(将序列的第一个数据看成是一个有序的子序列,然后从第二个记录逐个向该有序的子序列进行有序的插入,直至整个序列有序)
这里也举个例子,用网上的一个图片来说:
下图中:
黄色的是已经排好序的序列
绿色的是未排序待插入的序列
橙色的是待插入序列中待插入的元素
在这里插入图片描述
下面贴上代码:

	public static void insect(int []arrays)
	{

        int temp;

        for (int i=1;i<arrays.length;i++){
            if (arrays[i]<arrays[i-1]){
                temp = arrays[i];
                for (int j=i;j>=0;j--){
                    if (j>0 && arrays[j-1]>temp) {
                    	arrays[j]=arrays[j-1];
                    }
                    else {
                    	arrays[j]=temp;
                        break;
                    }
                }
            }
        }
	}
}

4,快速排序
感觉这个理解还算好理解,就是代码有一点难写,自己看了几篇我也没自己写出来,放一个链接吧,竹子可以看看
https://blog.csdn.net/MoreWindows/article/details/6684558?utm_source=distribute.pc_relevant.none-task
下面我再给竹子说一下快速排序的基本思想:在待排序数组array[1…n]中任取一个元素key作为基础(通常取首元素),通过一趟排序划分为独立的两部分array[1…k-1]和array[k+1…n],使得array[1…k-1]中的所有元素是小于key的,array[k+1…n]的所有元素大于等于key,然后把key放在最终位置array[k]上,然后递归对左右两个子数组重复上述过程,直到所有元素都排好序为止。
对于第一次趟排序,我给竹子画了个图,看看竹子能不能看清“”
在这里插入图片描述
附上算法吧:

public static void Quick(int []array,int low,int high)
	{
		if(low<high) {
			int pivotpos = Partition(array,low,high);
			Quick(array,low,pivotpos-1);
			Quick(array,pivotpos+1,high);
			
		
	}
	}
	public static int Partition(int array[],int low,int high)
	{
		int pivot = array[low];
		while(low<high)
		{
			while(low<high && array[high]>=pivot)  --high;
			array[low] = array[high];
			while(low<high && array[low]<=pivot)  ++low;
			array[high] = array[low];
		}
		array[low] = pivot;
		return low;
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值