数据结构中的三种排序(java)
来源:互联网 发布:php 获取客户端端口号 编辑:程序博客网 时间:2024/06/05 14:43
由于马上要参加一个笔试,又拿出了满是灰尘的数据结构课本,想把基本的数据类型和算法给看一看,由于找工作是java方面,所以有意把排序的算法用java写一下,水平很是一般,希望自己能够一步一个脚印,踏实走下去,如果能给大家一些启发就更好了。 代码全部测试过,如有瑕疵,请批评指正。
首先介绍引自百度---插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
插入排序的基本操作是:将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。
稳定的定义:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。
我的理解是:
1.把需要排序的数分成两份,第一份是有序的,第二份无序。
2.最开始可以把第一个数看成是有序,每次从第二份无序数中按顺序取一个数。
3.把取得数跟有序数中的最后一个比较,如果前者小于后者,找合适位置插入。
4.循环步骤三,则排序结束。
java实现 (数据使用严蔚敏版 数据结构)
public void InsertSort(int []s){int j;for (int i = 1; i <s.length; i++) { //从i=1开始,即认为数组第一个数为有序组if (s[i]<s[i-1]) { int temp=s[i];//从有序数组中从后往前开始匹配,找合适的位置for ( j = i-1; j >=0&&temp<s[j]; j--) {s[j+1]=s[j];//后移,给array1[i]留出插入位置}//插入s[j+1]=temp;}}for(int i=0;i<s.length;i++){System.out.print(s[i]+" ");}}编写测试方法
public static void main(String[] args) {// TODO Auto-generated method stubInsertSort insertSort=new InsertSort();int array []={49,38,65,97,76,13,27,49};//数组赋值insertSort.InsertSort(array);}
打印结果是:13 27 38 49 49 65 76 97
第二种 冒泡排序:
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
public void BubbleSort(int []s){for (int i = s.length-1;i>0; i--) {for (int j = 0; j < i; j++) {if (s[j]>s[j+1]) { //前一个大于后一个int temp=s[j];//交换位置s[j]=s[j+1];s[j+1]=temp;}}}for (int i = 0; i < s.length; i++) {System.out.print(s[i]+" ");}}主函数测试
public static void main(String[] args) {// TODO Auto-generated method stubBubbleSort bubbleSort=new BubbleSort();int array []={49,38,65,97,76,13,27,49};bubbleSort.BubbleSort(array);}
打印结果是:13 27 38 49 49 65 76 97
public class QuickSort {public static void main(String[] args) {// TODO Auto-generated method stubint []s={49,38,65,97,76,13,27};QuickSort qs=new QuickSort();qs.QuickSort(s, 0, s.length-1);//打印for (int i = 0; i < s.length; i++) {System.out.print(s[i]+" ");}}//递归 排序public void QuickSort(int []s,int low,int high){if (low<high) {int middle=getMiddle(s, low, high);//通过迭代来对每一部分排序QuickSort(s, low, middle-1);QuickSort(s, middle+1, high);}}//取得无序数组的中值public int getMiddle(int []s,int low,int high){//取第一个数作为中值int temp=s[low];while(low<high){//从后往前查找,当其值小于temp,把它交换到前边while(low<high&&s[high]>temp) high--;s[low]=s[high];////从前往后查找,当其值大于temp,把它交换到后边while(low<high&& s[low]<temp) low++;s[high]=s[low];}//把中值放到应该的位置s[low]=temp;return low;}}
打印结果:13 27 38 49 65 76 97
最后一种 选择排序
选择排序的解释:对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标,就让第一个元素跟他交换一下值,这样就找到整个数组中最小的数了。然后找到数组中第二小的数,让他跟数组中第二个元素交换一下值,以此类推。
我的理解:以上说的很明白,总体上说,第一次遍历找到最小的数,第二次遍历找到第二小的数,以此类推。
java实现
public class SelectSort {public static void main(String[] args) {// TODO Auto-generated method stubSelectSort selectSort=new SelectSort();selectSort.SelectSort();}public void SelectSort(){int temp;//存放每次循环中最小的数值int []s={100,52,68,59,57};//最小数值的 位置int position=0;for (int i = 0; i <s.length; i++) {position=i;temp=s[i];//当发现有比s[i]小的,交换位置for (int j = i+1; j < s.length; j++) {if (s[j]<temp) {temp=s[j];position=j;}}//交换位置s[position]=s[i];s[i]=temp;}//打印for (int i = 0; i < s.length; i++) {System.out.print(s[i]+" ");}}}
至此,这三类排序算法介绍完毕。
- 数据结构中的三种排序(java)
- java数据结构(三)排序
- Java数据结构中的排序
- java中的数据结构--排序
- Java 数据结构(一)---排序(三) 归并排序
- Java中的三种排序方式
- <三>java数据结构与算法 选择排序
- 数据结构(Java)--排序
- 数据结构中的几种排序
- java中的三种排序方法使用:选择排序,冒泡排序,sort方法排序。
- 数据结构 三种简单的排序(插入、选择、冒泡)
- 数据结构与算法之一(三种简单排序)
- 三种基本排序之间的比较(摘之java数据结构与算法第二版Robert Lafore)
- 数据结构-各类排序算法总结(三)
- 数据结构——排序(三)
- 数据结构之快速排序(三)
- 数据结构之排序算法(三)
- java数组中的三种排序方法中的冒泡排序方法
- PHP下get_headers用法
- python学习笔记-01基础
- VELT-0.1.5开发:在vs2013下编译gdb
- Android自定义控件 开源组件SlidingMenu的项目集成
- c++Primer,四,数组和指针
- 数据结构中的三种排序(java)
- Http中get和post的区别
- angular 使用 ui-router 设计网页
- apk,task,android:process与android:sharedUserId的区别
- eclipse import android project出错,无法编译
- webBrowser强制在本窗口打开,禁止在新窗口打开的解决方案
- 走近CSDN博客Markdown编辑器
- JAVA MemCache 史无前例的详细讲解!看完包精通MEMCACHE!.
- Java关于Synchronized关键字在不同位置使用的理解