冒泡排序:
第一轮:从下标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; }