Java实现排序算法

  • 选择排序
思想:比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换......第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成。
  1. package test;
  2. publicclassSelectSort{
  3. publicstaticvoid selectSort(int a[]){
  4. int temp=0;
  5. int flag=0;
  6. int n=a.length;
  7. for(int i=0;i<n;i++){
  8. temp=a[i];//最开始最小位置为第一个位置
  9. flag=i;
  10. for(int j=i+1;j<n;j++){//找到最小位置 最小位置为temp
  11. if(a[j]<temp){
  12. temp=a[j];
  13. a[j]=a[i];
  14. a[i]=temp;
  15. }
  16. }
  17. if(flag!=i){//将最小值temp与第一个值交换
  18. a[flag]=a[i];
  19. a[i]=temp;
  20. }
  21. }
  22. }
  23. publicstaticvoid main(String[] args){
  24. int a[]={5,3,6,7,2,1,10,22,90};
  25. selectSort(a);
  26. for(int i=0;i<a.length;i++){
  27. System.out.print(a[i]+" ");
  28. }
  29. System.out.println();
  30. }
  31. }
  • 插入排序
思想:给定一组记录,初始时,假定第一个记录自成一个有序序列,其余序列为无序序列。接着从第二个记录开始,按照记录大小将当前就插入到其之前的有序序列。
  1. package test;
  2. publicclassInsertSort{
  3. publicstaticvoid insertSort(int[]a){
  4. if(a!=null){
  5. for(int i =1; i < a.length; i++){
  6. int temp=a[i];
  7. int j=i;
  8. if(a[j-1]>temp){//从后向前插入temp
  9. while(j>=1&&a[j-1]>temp){
  10. a[j]=a[j-1];//插入位置后移
  11. j--;
  12. }
  13. }
  14. a[j]=temp;
  15. }
  16. }
  17. }
  18. publicstaticvoid main(String[] args){
  19. int a[]={5,3,6,7,2,1,10,22,90};
  20. insertSort(a);
  21. for(int i=0;i<a.length;i++){
  22. System.out.print(a[i]+" ");
  23. }
  24. System.out.println();
  25. }
  26. }
 
  • 冒泡排序
思想:对于给定的n个记录,从第一个记录开始对相邻的两个记录比较,当前面的记录大于后面的记录时,交换两个记录的位置,
          经过第一轮交换后,n个记录中的最大值将位于位置你。然后对前n-1个位置重复上述过程。
  1. package test;
  2. publicclassBubbleSort{
  3. publicstaticvoid bubbleSort(int a[]){
  4. for(int i=0;i<a.length;i++){
  5. for(int j=0;j<a.length-1-i;j++){
  6. if(a[j]>a[j+1]){//如果后一个数小于前一个数交换
  7. int temp=a[j];
  8. a[j]=a[j+1];
  9. a[j+1]=temp;
  10. }
  11. }
  12. }
  13. }
  14. publicstaticvoid main(String[] args){
  15. int a[]={5,3,6,7,2,1,10,22,90};
  16. bubbleSort(a);
  17. for(int i=0;i<a.length;i++){
  18. System.out.print(a[i]+" ");
  19. }
  20. System.out.println();
  21. }
  22. }
思想:“分而治之”思想,经过一趟排序,将原序列分成两个部分,一部分比另一部分小(分界点往往是第一个记录),然后分别对左右两部分分别快速排序。
          ①以第一个关键字 K 1 为控制字,将 [K 1 ,K 2 ,…,K n ] 分成两个子区,使左区所有关键字小于等于 K 1 ,右区所有关键字大于等于 K 1 ,最后控制字居两个子区中间的适 当位 置。
              在子区内数据尚处于无序状态。

          ②把左区作为一个整体,用①的步骤进行处理,右区进行相同的处理。(即递归)
          ③重复第①、②步,直到左区处理完毕。

技术分享
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 





郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。