数列排序——多种内排序方法实现

数列排序

资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
  给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200
输入格式
  第一行为一个整数n。
  第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。
输出格式
  输出一行,按从小到大的顺序输出排序后的数列。
样例输入
5
8 3 6 4 9
样例输出
3 4 6 8 9

思路

这道题就是对数列的元素进行排序,其中数列我们可以用数组的存储结构来进行存储,然后根据数据结构中学习到的排序算法,选择相应的高级语言进行具体代码的编写。
首先可以选择选择排序中的冒泡排序,主要思想就是有一个n个元素的数组,一共记性n-1次排序过程,每次排序过程选出最小的一个数,依次按顺序放置到数组的对应位置直到数组全局有序。冒泡排序的双层循环进行排序,外循环是排序的轮数,内循环是每轮排序的次数
除了冒泡排序算法以外,我还选择了同为选择排序的快速排序来进行解答,快速排序的思想就是以一个元素为基准,然后把数组中比它小的元素移到它的左边,比它大的元素移到它的右边,然后找到这个元素的插入位置,然后运用这个思想直到整个数组呈现全局有序的状态

代码

import java.util.Scanner;

public class QuickSort {
	public static void main(String[] args){
		Scanner scanner=new Scanner(System.in);
		int m;
		m=scanner.nextInt();
		int [] R=new int[m];
		for (int i = 0; i <R.length; i++) {
			R[i]=scanner.nextInt();
		}
		buttonsort(R,m);
		//quicksort(R, 0, m-1);
		for (int i = 0; i < R.length; i++) {
			System.out.print(R[i]+" ");
		}
	}
	/*
	private static void quicksort(int [] a,int r,int t)
	{
		int i=r,j=t,tmp;
		if(r<t){
			tmp=a[r];
			while(i!=j){//注意while循环的条件是i!=j
				if(j>i&&a[j]>=tmp)
					j--;
				a[i]=a[j];//找到一个小于tmp的值与a[i]交换
				if(i<j&&a[i]<=tmp)
					i++;
				a[j]=a[i];
			}
			a[i]=tmp;
			quicksort(a,r,i-1);
			quicksort(a,i+1,t);
		}
	}
	*/
	private static void buttonsort(int a[],int n)
	{
		int temp;
		boolean isflag=true;
		for (int i = 0; i < n-1; i++) {//冒泡排序的次数是元素的个数减一
			for (int j = n-1; j >i; j--) {//每轮冒泡排序从最后一个元素向前比较,确定一个最小的元素放在最前方
				if (a[j]<a[j-1]) {
					//进行交换操作
					temp=a[j];
					a[j]=a[j-1];
					a[j-1]=temp;
					isflag=false;
				}
			}
			if(isflag)
				return;
		}
	}
}

总结

这个进行数组排序的题目让我对数据结构中的几种内排序算法有了更深刻的理解,我这里只是简单的使用了冒泡排序和快速排序。然后其实可以扩散到其他排序算法,例如(简单选择排序,堆排序,二路归并排序)等等。或许以后解其它的算法题会用到这些排序的算法。总而言之,我认为掌握排序算法的基本思想很重要。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值