十大排序之冒泡和选择排序
你好,我是goldsunC
让我们一起进步吧!
排序
排序
,就是指将一组数据,按照特定规则调换位置,使数据具有某种顺序关系(递增或递减)。
直接移动
和
逻辑移动
两种。
直接移动
是直接交换存储数据的位置,而
逻辑移动
并不会移动数据存储的位置,
仅改变指向这些数据的指针。
-
数据比较容易阅读 -
数据比较利于统计及整理 -
可以大幅减少数据搜索的时间。
排序分类
排序可以按照执行时所使用的内存分为以下两种方式:
-
内部排序
:排序的数据量小,可以完全在内存中进行排序。 -
外部排序
:排序的数据量无法直接在内存中进行排序,而必须使用辅助存储器(如硬盘)。
内部排序法
有:
冒泡排序、选择排序、插入排序、合并排序、快速排序、堆积排序、希尔排序、基数排序法等,比较常见的
外部排序法
有:
直接合并排序、k路合并、多相合并法等。
排序算法分析
时间复杂度
空间复杂度
算法稳定性
原始数据 :5(左),9,1,4,3,5(右),6
稳定排序 :1,3,4,5(左),5(右),6,9
不稳定排序 :1,3,4,5(右),5(左),6,9
冒泡排序
代码如下:
JAVA
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
int[] arrays = {6,5,9,7,2,8};
bubbleSort(arrays);
System.out.println(Arrays.toString(arrays));
}
public static void bubbleSort(int[] array) {
int temp;
/**
* 冒泡排序
* i 为扫描次数
* j 为比较值的坐标
*/
for (int i=array.length-1;i>0;i--) {
for (int j=0;j<i;j++) {
if (array[j]>array[j+1]) {
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
}
}
Python
def buttle_sort(array):
for i in range(len(array)-1):
for j in range(len(array)-i-1):
if array[j] > array[j+1]:
array[j],array[j+1] = array[j+1],array[j]
if __name__ == '__main__':
array = [6,5,9,7,2,8]
buttle_sort(array)
print(array)
改良的冒泡排序
n(n-1)/2
次,而实际上如果数据执行中途已经完成排序,完全不必要多执行剩下的步骤,因此我们可以通过增加一个标志变量来判断数据是否已经完成排序,如果完成排序就让程序提前退出:
改良后的JAVA排序函数:
public static void bubbleSort(int[] array) {
int temp,flag;
/**
* 冒泡排序
* i 为扫描次数
* j 为比较值的坐标
*/
for (int i=array.length-1;i>0;i--) {
flag = 0;
for (int j=0;j<i;j++) {
if (array[j]>array[j+1]) {
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
flag++;
}
}
if (flag == 0)
break;
}
}
}
改良后的Python函数:
def buttle_sort(array):
for i in range(len(array)-1):
flag = 0
for j in range(len(array)-i-1):
if array[j] > array[j+1]:
array[j],array[j+1] = array[j+1],array[j]
flag += 1
if flag == 0:
break
选择排序
代码如下:
JAVA
import java.util.Arrays;
public class SelectSort {
public static void main(String[] args) {
int[] arrays = {6,5,9,7,2,8};
selectSort(arrays);
System.out.println(Arrays.toString(arrays));
}
public static void selectSort(int[] array) {
int temp;
for (int i=0;i<5;i++) {
for (int j=i+1;j<6;j++) {
if (array[i]>array[j]) {
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
}
Python
def select_sort(array):
for i in range(len(array)-1):
for j in range(i+1,len(array)):
if array[i]>array[j]:
array[i],array[j] = array[j],array[i]
if __name__ == '__main__':
array = [6, 5, 9, 7, 2, 8]
select_sort(array)
print(array)
• end •
走在路上
goldsunC