首页 > 代码库 > Java排序算法(一)
Java排序算法(一)
Java排序算法(一)
一、排序的基本概念和分类
1.1排序的定义
在《大话数据结构》中,排序定义为,假设含有n个记录的序列为{r1,r2,...,rn},其相应的关键字{k1,k2,...,kn},需确定1,2...n的一种排列p1,p2...pn,是其相应的关键字满足Kp1<=Kp2<=...<=Kpn(非递减或非递增)关键,即使得序列称为一个按关键字有序的序列{rp1,rp2...rp3},这样的操作称为排序。
1.2排序的稳定性
假设ki=kj(1<=i<=n,1<=j<=n,i!=j),且在排序前的序列中ri领先于rj(即i<j)。如果排序后ri仍然领先rj,则所用的排序方法是稳定的;反之, 若可能使得排序后序列中rj领先ri,则称所用的排序方法是不稳定的。如图所示:
1.3内排序和外排序
内排序是在排序整个过程中,待排序的所有记录全部被放置在内存中。
外排序是由于排序的记录个数太多,不能同时放置在内存,整个排序过程需要内外多次交换数据才能进行
主要讨论内排序,排序算法性能主要受三方面影响
1.时间性能(尽可能少的关键字比较次数和尽可能少的记录移动次数)
2.辅助空间(执行算法所需要的其他存储空间)
3.算法复杂性(算法本身的复杂度,不是算法的时间复杂度)
1.4七个主要的排序算法
按照算法的复杂性(可以简单理解为算法逻辑和算法编码量)
简单排序算法:冒泡排序,简单选择排序,直接插入排序
改进算法:快速排序,希尔排序,归并排序,堆排序
二、简单排序算法
1 public class Sort 2 { 3 //实现从小到大排序 4 public static void main(String[] args) 5 { 6 int[] arr1 = {9,1,5,8,3,7,4,6,2}; 7 bubbleSort2(arr1); 8 //selectSort(arr1); 9 for(int i=0;i<arr1.length;i++) 10 { 11 System.out.println(arr1[i]); 12 } 13 } 14 /* 15 *冒泡排序,相邻两个元素进行比较,如果满足条件进行位置置换 16 *原理:本函数内循环一次,将最值提到冒泡到最尾部 17 *备注:各位大雕可以写一个冒泡到数组头部的,我写冒泡到尾部代码看起来比较好记,哈哈 18 *时间复杂度:比较1+2+3+...+n=n*(n+1)/2次,并做等数量级的记录移动O(n*n) 19 */ 20 public static void bubbleSort1(int[] arr) 21 { 22 23 for(int i=0;i<arr.length-1;i++) 24 { 25 for(int j=0;j<arr.length-1-i;j++) 26 { 27 if(arr[j]>arr[j+1]) 28 { 29 int temp = arr[j]; 30 arr[j] = arr[j+1]; 31 arr[j+1] = temp; 32 } 33 } 34 } 35 } 36 /* 37 *简单选择排序,以一个角标的元素和其他元素进行比较 38 *原理,从n-1-i个记录中选出关键字最小的记录,并和第i个记录交换 39 *时间复杂度:O(n*n),相对而言,简单选择排序的性能要略优于冒泡排序 40 */ 41 public static void selectSort(int[] arr) 42 { 43 for(int i=0;i<arr.length-1;i++) 44 { 45 int min = i; //将当前下标定义为最小值下标 46 for(int j=i+1;j<arr.length;j++) 47 { 48 //j初始化为i,表示每次都是数组arr下标为i的元素和后面(i+1)的元素进行比较 49 if(arr[min]>arr[j]) 50 { 51 min = j; //如果有小于当前最小值的关键字,此关键字下标赋值给min 52 } 53 } 54 if(i!=min) //如果min不等于i,说明找到最小值,交换 55 { 56 int temp = arr[i]; 57 arr[i] = arr[min]; 58 arr[min] = temp; 59 } 60 } 61 } 62 /* 63 *直接插入排序, 64 *原理:将一个记录插入到已经排好序的有序表中,从而得到一个新的。记录数增加1的有序表 65 *例子:《大话数据结构》中将其比作抽扑克牌,抽一张排序一张,好书推荐。。。 66 */ 67 public static void insertSort(int[] arr) 68 { 69 for(int i=1;i<arr.length;i++) 70 { 71 int temp = arr[i]; 72 for(int j=i;j>0&&temp<arr[j-1];j--) 73 { 74 arr[j]=arr[j-1]; 75 }
76 arr[j]=temp; 77 } 78 } 79 80 }
Java排序算法(一)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。