数据结构与算法中简单的排序差不多就冒泡排序,选择排序,插入排序这些了,另外根据数组存储的元素是对象,还有一个对象排序,其实就是在比较的时候抽出对应对象的某一字段进行比较罢了。

首先讲讲冒泡排序,这里只讲第一轮比较,后面的以此类推。首先取出数组第一个元素,然后与它后面的第一个元素进行比较(此时是从小到大进行的排序),如果第一个元素比他后面的那个元素大,那么,互换下位置,接下来,第二个元素再和后面的第三个元素进行比较,也一样,如果前面的比后面的大,那么互换位置,最终的目的是将最大的元素移到最后面。这样子,一轮排序下来,最大的数就已经排好了,接下来排第二大,也就是第二轮,以此类推,排完n-1次就全部排完了。

public static void bubbleSort(int[] sortArr){
		int len=sortArr.length;
//这里的每一次循环就是上面的一幅类似的图 for(int i = len-1;i>0;i--){
//这里的每次循环就是上面的图中的一幅小图 for(int j=0;j<i;j++){ if(sortArr[j]>sortArr[j+1]){ int tmp=sortArr[j]; sortArr[j]=sortArr[j+1]; sortArr[j+1]=tmp; } } } }

然后讲下选择排序,只讲第一轮比较

下标第一个数组元素和后面的所有元素都进行一下比较,每次比较到更小的都把比较下标赋值为更小的元素的下标,说白了,第一轮比较下来我们可以拿到最小的元素的下标,然后和第一个元素互换位置,此时最小的元素已经移到第一位了,完成第一轮排序,后面的以此类推.(看算法程序的最好方法应该是举个具体的数组例子带入程序中跟着走一遍,理解算法最好的方法那就是画图了,下面的不画了,自己照样画葫芦吧。)

public static void selSort(int[] sortArr){
		//循环遍历,当前元素则为目标元素
		for(int i=0;i<sortArr.length-1;i++){
			int min=i;
			//以目标元素后面的元素为比较元素,比较出目标及之后的最小一个
			for(int j=i+1;j<sortArr.length;j++){
				if(sortArr[min]>sortArr[j]){
					min=j;
				}
			}
			//用目标 元素和比较出来的元素进行交换
			int tmp=sortArr[min];
			sortArr[min]=sortArr[i];
			sortArr[i]=tmp;
		}
	}

最后讲一下插入排序,相对难理解一点

首轮,从数组的第二个元素也就是下标为1的元素开始,整个插入排序的过程记住一点就是每轮循环到的元素左边的是有序的,右边的是无序的。然后用第一个元素和它前面的元素也就是下标为0的元素进行比较,如果比第二个元素大,那将其移到第二个元素的位置,也就是前移一位,此时下标为0已经到尽头了,我们将第二个元素放在下标为零的位置.此时,数组的前两个元素就是有序的了。以此类推.

public static void insertSort(int[] sortArr){
		int len=sortArr.length;
		for(int i=1;i<len;i++){
			int temp=sortArr[i];
			int in = i;
			while(in>0 && sortArr[in-1]>=temp){
				sortArr[in]=sortArr[in-1];
				--in;
			}
			sortArr[in]=temp;
		}
	}

对象排序的把直接比较的元素改为从对象中点出对应的基本元素进行比较还有就是互换的时候换的是对象的引用变量就行了.

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!