给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。
这道题就是考察排序算法
我上网了解了一下O(n2)的算法有以下几种
(1)冒泡排序:顾名思义从头开始将最大的慢慢与后一个元素作比较,像气泡一样慢慢浮上去
public class Solution { /* * @param A: an integer array * @return: */ public void sortIntegers(int[] A) { int n = A.length; for(int i = 0 ; i < n ; i++){ for(int j = i + 1 ; j < n ; j++){ if(A[i]>A[j]){//每次与后面的元素进行一一对比 然后符合条件就交换(交换非常耗时间) int temp = A[i]; A[i] = A[j]; A[j] = temp; } } } } }
(2)选择排序:将选取元素后面的元素选取最小(最大)元素进行比较交换,将小(大)的元素放在最前面
public class Solution { /* * @param A: an integer array * @return: */ public void sortIntegers(int[] A) { int n = A.length; for(int i = 0 ; i < n ; i++){ int min = A[i];//将当前元素设置为最小的元素 int k = i; //角标也设置成当前 for(int j = i+1 ; j < n ; j++){ if(A[j]<min){ //当符合条件就将至赋值给min并记录角标 min = A[j]; k = j; } } int temp = A[k]; //在取得最小值和角标后进行交换操作(注:这里缺少一个从别人那里借鉴小优化:将temp与A[i]比较然后判断不同在进行交换) A[k] = A[i]; A[i] = temp; } } }
(3)插入排序:将当前元素与之前的元素进行比较放在合适的位置上,整理扑克就是这个原理
class Solution: """ @param: A: an integer array @return: """ def sortIntegers(self, A): n = len(A) for i in range(1,n): temp = A[i]#记录当前值,因为当前只可能要跟前面的制进行交换,如果要交换,必然使前面交换的位置向后移一位使得原来的位置上的元素被覆盖 j = i-1#从前一位开始比较 while j >= 0 and temp < A[j]:#当前一个位置的角标超出了0或者比当前值小(因为前面的值都是排好顺序的)就停止循环查找, A[j+1] = A[j]#将交换位置后面的数据往后移一位 j = j-1 A[j+1] = temp #因为最后一次的循环 j--了 j上的元素肯定比temp小所以我们要把元素放到j后一位
写到最后,我发现我越来越喜欢python这门语言,写插入排序时感觉代码简单粗暴。。。