zoukankan      html  css  js  c++  java
  • 数据结构--排序--简单排序

     1 /*插入排序--是基本排序里面性能比较好的(比较适合基本有序的排序)
     2  *排序的思想:一个序列,前边是有序的,后边是无序的,拿出一个元素进行插入到已经有序
     3  *           的部分(这里就涉及移动的操作)--先找到位置,再移动
     4  *特点:一趟排序下来每个元素的位置可能不是固定的
     5  *时间复杂度:O(N2)
     6  *排序的稳定性:稳定的
     7  *使用场景:数据基本有序的情况下
     8  * */
     9 public class TestInsertSort {
    10 
    11     public static void main(String[] args) {
    12         int[] list1 = {10,8,9,7};
    13         insertSort(list1);
    14         for(int i = 0; i < list1.length; i++){
    15             System.out.print(list1[i] + " ");
    16         }
    17 
    18     }
    19     
    20     public static void insertSort(int[] list){
    21         for(int i = 1; i <list.length; i++){
    22             //记录现在被比较的值
    23             int temp = list[i];
    24             int j = i;
    25             //和前面有序的部分比较找到位置插入【满足>0和比前面的元素小】
    26             while(j > 0 && list[j-1] > temp){
    27                 list[j] = list[j-1];//向右边移动
    28                 j--;
    29             }
    30             list[j] = temp;
    31         }
    32     }
    33 
    34 }
     1 /*冒泡排序--属于简单排序
     2  *思想:就是每两个相邻的元素比较-交换直到排完一趟排序,确定出最大的一个元素
     3  *具体实现:需要嵌套循环 
     4  *外循环:控制排序趟数--n-1
     5  *内循环:控制每趟的比较次数n-1/n-2....
     6  *冒泡排序的时间复杂度:O(N2)--比较+交换
     7  *排序的稳定性:指的是存在相同的值的元素排序后相对位置不变
     8  *本质就是较换的条件是:大于而不是大于等于
     9  * */
    10 public class TestBubbleSort {
    11 
    12     public static void main(String[] args) {
    13         int[] list = {10, 8,7,9,2,3,1,0};
    14         int[] list1 = bubbleSort(list);
    15         for(int i = 0; i < list1.length; i++){
    16             System.out.print(list1[i] + " ");
    17         }
    18     }
    19     
    20     public static int[] bubbleSort(int[] list){
    21         //外部循环控制排序的趟数
    22         for(int i = 1; i < list.length; i++){
    23             //内部比较每趟比较的次数
    24             for(int j = 0; j <list.length - i; j++ ){
    25                 if(list[j] > list[j+1]){//保证排序的稳定性
    26                     int temp = list[j];
    27                     list[j] = list[j+1];
    28                     list[j+1] = temp;
    29                     
    30                 }
    31             }
    32         }
    33         return list;
    34     }
    35     
    36     
    37 
    38 }
     1 /*选择排序--对冒泡排序的一定的改进,减少了较好的次数
     2  *基本思路:将第一个元素与后面的所有元素比较,找到最小的元素与第一个交换
     3  *          完成一次排序,后面依次找出第二小等等
     4  *具体实现:嵌套循环(外控制排序趟数,内控制交换次数)
     5  *选择排序的时间复杂度:O(N2)
     6  *排序的稳定性:稳定
     7  *使用场景:数据量比较小的情况下
     8  * */
     9 public class TestSelectSort {
    10 
    11     public static void main(String[] args) {
    12         int[] list1 = {10,8,0,7,9,7,6,5,4};
    13         selectSort(list1);
    14         for(int i = 0; i < list1.length; i++){
    15             System.out.print(list1[i] + " ");
    16         }
    17     }
    18     
    19     //以及有序的不在参与比较【减少较好次数】
    20     public static void selectSort(int[] list){
    21         for(int i = 0; i < list.length -1; i++){
    22             for(int j = i + 1; j < list.length; j++){
    23                 if(list[i] > list[j]){
    24                     int temp = list[i];
    25                     list[i] =list[j];
    26                     list[j] = temp;
    27                 }
    28             }
    29         }
    30     }
    31 
    32 }
  • 相关阅读:
    统计字符的有效字数
    Ubuntu Wifi网络连接不上或经常断网
    Git实战指南----跟着haibiscuit学Git(第十一篇)
    Git实战指南----跟着haibiscuit学Git(第十篇)
    Git实战指南----跟着haibiscuit学Git(第九篇)
    Git实战指南----跟着haibiscuit学Git(第八篇)
    Git实战指南----跟着haibiscuit学Git(第七篇)
    Git实战指南----跟着haibiscuit学Git(第六篇)
    linux之网络命令
    Ceph实战入门之安部署篇
  • 原文地址:https://www.cnblogs.com/sun1993/p/7821313.html
Copyright © 2011-2022 走看看