算法学习之一,排序算法
来源:互联网 发布:java 获取每个月 编辑:程序博客网 时间:2024/06/06 12:48
1 public class Sort01 { 2 public static void sort(Comparable[] a){ 3 //排序算法 4 } 5 public static boolean less(Comparable v,Comparable w){ 6 return v.compareTo(w)<0; 7 } 8 public static void exch(Comparable[] a,int i,int j){ 9 Comparable t=a[i];10 a[i]=a[j];11 a[j]=t;12 }13 public static void show(Comparable[] a){14 for(int i=0;i<a.length;i++){15 System.out.print(a[i]+" ");16 }17 System.out.println();18 }19 public static boolean isSorted(Comparable[] a){20 for(int i=1;i<a.length;i++)21 if(less(a[i],a[i-1])) return false;22 return true;23 }24 25 public static void main(String[] args){26 Scanner scanner=new Scanner(System.in);27 Comparable[] number=new Comparable[10];28 for(int i=0;i<10;i++){29 number[i]=scanner.nextInt();30 }31 sort(number);32 // assert isSorted(number);33 show(number);34 35 36 }37 }
一 选择排序:
选择排序就是选择最小的值放在最头的元素
举例说就是:
3 5 6 2 1
第一趟:1 3 5 6 2
第二趟:1 2 5 6 3
第三趟:1 2 3 6 5
第四趟:1 2 3 5 6
算法实现:
1 public static void sort(Comparable[] a){2 for(int i=0;i<a.lenth;i++){3 int min=i;4 for(int j=i+1;j<a.lenth;j++){5 if(less(a[j],a[min])) min=j;6 }7 exch(a,i,min);8 }
输入样例:
3 5 6 2 1
输出样例:
1 2 3 5 6
二 插入排序
插入排序就是选择一个点,如果后面的那个点小于之前的点就交换,当之前的点小于这个点的时候,则选择下一个点,如果是这个序列本来就是顺序的,那么这个排序的复杂度就是线性介,也就是O(n)
实现
1 poublic static void sort(Comparable[] a){2 for(int i=1;i<a.lenth;i++){3 for(int j=i;j>0&&less(a[j],a[j-1],j--){4 exch(a,j,j-1);5 }6 }7 }
插入排序从代码上看比选择排序简单很多而且时间复杂度比选择排序更好一些
基本步骤是将第一个元素作为标志位,然后开始第二个元素比较,之后第二个元素作为标志位,再次比较之前的,当且仅当元素顺序一致的时候,不用执行第二个嵌套的循环,这个 时候的时间复杂度位线性介。
基本顺序大概是这样的:
11 15 41 23 10 4 14 8 74 47
第一趟:11 15 41 23 10 4 14 8 74 47
第二趟:11 15 41 23 10 4 14 8 74 47
第三趟:11 15 23 41 10 4 14 8 74 47
第四趟:10 11 15 23 41 4 14 8 74 47
第五趟:4 10 11 15 23 41 14 8 74 47
第六趟:4 10 11 14 15 23 41 8 74 47
第七趟:4 8 10 11 14 15 23 41 74 47
第八趟:4 8 10 11 14 15 23 41 74 47
第九趟:4 8 10 11 14 15 23 41 47 74
第十趟:4 8 10 11 14 15 23 41 47 74
以上排序结果都是程序输出的,我们发现前三次结果没有什么变化因为前三次是顺序的,所以第二个循环就没有执行。
三 希尔排序
希尔排序就是选择一定间隔的元素比较大小,将h个数组独立排序
希尔排序的实现:
1 public static void ShellSort(Comparable[] a){ 2 int h=1; 3 while(h<a.length/3) h=3*h+1; 4 while(h>=1){ 5 for(int i=h;i<a.length;i++){ 6 for(int j=i;j>=h&&less(a[j],a[j-h]);j-=h){ 7 exch(a,j,j-h); 8 } 9 }10 h/=3;11 }
11 15 41 23 10 4 14 8 74 47
第1趟:10 15 41 23 11 4 14 8 74 47
第2趟:10 4 41 23 11 15 14 8 74 47
第3趟:10 4 14 23 11 15 41 8 74 47
第4趟:10 4 14 8 11 15 41 23 74 47
第5趟:4 10 14 8 11 15 41 23 74 47
第6趟:4 10 8 14 11 15 41 23 74 47
第7趟:4 8 10 14 11 15 41 23 74 47
第8趟:4 8 10 11 14 15 41 23 74 47
第9趟:4 8 10 11 14 15 23 41 74 47
第10趟:4 8 10 11 14 15 23 41 47 74
排序大概是这样。
--------------------------------4月17日更新--------------------------------------------
Python语言基本排序总结:
冒泡排序:
1 #冒泡排序2 number=[5,7,9,1,3,2,0]3 for k in range(1,number.__len__()):4 for i in range(0,number.__len__()-k):5 if number[i]>number[i+1]:6 temp=number[i]7 number[i]=number[i+1]8 number[i+1]=temp9 print number
选择排序:
#选择排序number=[5,7,9,1,3,2,0]for k in range(1,number.__len__()): for i in range(0,number.__len__()): if number[k]<number[i]: temp=number[i] number[i]=number[k] number[k]=tempprint number
快速排序:
#快速排序number=[5,7,9,1,3,2,0]def thesort(low,high,a): first = low last = high if first>=last: return key = a[first] while first<last: while first<last and a[last]>=key: last=last-1 a[first]=a[last] while first<last and a[first]<=key: first=first+1 a[last]=a[first] a[first]=key thesort(low,first-1,a) thesort(first+1,high,a)thesort(0,6,number)print number
- 算法学习之一,排序算法
- 算法学习之一:堆排序
- 算法学习之一java实现堆排序
- 算法学习之一java实现选择排序
- 算法学习之一java实现冒泡排序
- 排序算法之一
- 重写排序算法之一
- 常用排序算法之一
- 排序算法之一 选择排序
- 排序算法之一插入排序
- 【算法-排序之一】冒泡排序
- 【算法-排序之一】冒泡排序
- 【算法-排序之一】冒泡排序
- 【算法-排序之一】冒泡排序
- 排序算法之一---选择排序
- 排序算法之一----插入排序
- 排序算法之一:插入排序
- 排序算法之一 快速排序
- iOS--将 .sql 文件 写入数据库
- JavaScript回调函数详解
- LDA线性判别分析
- Python爬虫的一些小技巧
- Java byte数组和文件相互转换
- 算法学习之一,排序算法
- Java多线程学习笔记——信号量的使用
- android中的单例模式
- 简单的理解依赖注入
- jsp中从服务端下载文件
- 再谈依赖注入(依赖注入的简单实现)
- DataBinding框架初体验
- 解决Fedora解压文件产生乱码的问题
- PHP的反射机制