八大排序算法总结(1)

冒泡排序:

第一轮:从下标0到n-1(n 是数组长度),如果前一个元素比后一个元素大,那么,相邻的两两交换,最后数组中最大的元素放在最后一个位置上。

第二轮:从下标0到n-2,重复上过程,这样第二大的元素,就放在了倒数第二个位置上。

。。。。。。。

 

冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序

  

//冒泡排序
    public static void buddleSort(int[] a ){
        for(int i =0;i<a.length-1;i++)
            for(int j=0;j<a.length-1-i;j++)
                if(a[j]>a[j+1])
                    swap(a, j+1, j);                                
    }

 

 1 def bubble_sort(x):
 2     '''
 3     bubble sort
 4         每次将最大的元素放在最后一位
 5         循环N次
 6 
 7 
 8 
 9 
10         [6, 5, 1, 4]
11         [5, 6, 1, 4]
12         [5, 1, 6, 4]
13         [5, 1, 4, 6]
14 
15         [1, 5, 4, 6]
16         [1, 4, 5, 6]
17 
18         [1, 4, 5, 6]
19     Arguments:
20         x {[type]} -- [description]
21 
22     Returns:
23         [type] -- [description]
24     '''
25     for i in range(len(x)):
26         for j in range(len(x) - 1 - i):
27         #for j in range(len(x)-1-i-1,-1,-1):28             if(x[j] > x[j + 1]):
29                 swap(x, j, j + 1)
30     return x

 

 

选择排序:

第一轮:从下标0到n-1,找出最小元素的下标min, 交换min 与 0,这样第一个位置放的是最小的元素。

第二轮:从下标1到n-1,找出最小元素的下标min,交换min与1,这样第二个位置放的是第二小的元素。

。。。。。。。

//选择排序
    public static void choseSort(int[] a ) {
        int min;
        for(int i=0;i<=a.length-1;i++){
            min = i;
            for(int j=i;j<=a.length-1;j++)
                if(a[j]<a[min])
                    min=j;
            
            if(min!=i) swap(a, min, i);
        }
    }

 

 

 1 def chouse_sort(x):
 2     '''[summary]
 3 
 4     选择一个最小的元素放在前面
 5 
 6 
 7     Arguments:
 8             x {[type]} -- [description]
 9     '''
10 
11     for i in range(len(x)):
12         minx = i
13         for j in range(i, len(x)):
14             if(x[j] < x[minx]):
15                 minx = j
16         swap(x, i, minx)
17     return x

 

 

 

插入排序:

 
  

 直接插入排序基本思想是每一步将一个待排序的记录,插入到前面已经排好序的有序序列中去,直到插完所有元素为止。

 
  

  

1 public static void insertSort(int[] a) {
2         for (int i = 0; i < a.length; i++) 
3             for (int j = i; j > 0; j--) 
4                 if(a[j]<a[j-1])
5                     swap(a, j, j-1);                    
6     }

 

 

 1 def insert_sort(x):
 2     '''[summary]
 3     通过逐次交换,将当前的数字交换到前面,从而实现插牌
 4 
 5 
 6     Arguments:
 7             x {[type]} -- [description]
 8     '''
 9 
10     for i in range(len(x)):  # 摸牌
11         for j in range(0, i)[::-1]:  # 将0到i-1的所有元素,逐次与i比较
12             print(x, i, j)
13             if(x[j + 1] < x[j]):
14                 swap(x, j, j + 1)
15     return x

 

 

 

辅助函数:

public static void swap(int[] a ,int i ,int j) {
        int temp=a[i];
        a[i] = a[j];
        a[j] = temp;
        
    }

 

转载于:https://www.cnblogs.com/zle1992/p/8007138.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值