排序算法
——冒泡、选择(Java语言)
一、冒泡排序
算法描述:
1、设待排序序列中的记录的数为n
2、一般地,第 i 趟起泡排序从1 到 n-i+1
3、依次比较相邻两个记录的关键字,如果发生逆序,则交换之。
4、其结果是这 n-i+1 个记录中,关键字最大的记录被交换到第 n-i+1 的位置上,最多作 n-1 趟。
代码:
public class sortMethods {
public static void main(String[] args) {
int a[]={8,3,2,5,9,3,6};
bubbleSort(a);
Print(a);
}
//冒泡排序
private static void bubbleSort(int[] a) {
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length-i-1;j++){
if (a[j]>a[j+1]) {
swap(a,j,j+1);
}
}
}
}
private static void swap(int[]a,int i,int j) {
int temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
private static void Print(int[] a) {
for(int num:a){
System.out.print(num+"\t");
}
System.out.println();
}
}
冒泡算法也是可以优化的,优化后算法如下:
private static void bubbleSort2(int[] a) {
for(int i=0;i<a.length-1;i++){
boolean flag = true;
for(int j=0;j<a.length-i-1;j++){
if (a[j]>a[j+1]) {
swap(a,j,j+1);
flag = false;
}
}
if (flag) {
break;
}
}
}
时间复杂度:T(n)=O(n²),空间复杂度:S(n)=O(1)
二、选择排序
1、首先通过n-1次比较,从n个数中找出最小的, 将它与第一个数交换——第一趟选择排序,结果最小的数被安置在第一个元素位置上。
2、再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录,将它与第二个数交换——第二趟选择排序。
3、重复上述过程,共经过n-1趟排序后,排序结束。
简单的理解,第一趟找到整个数列中最小的那个数,把它和整个数列的第一位交换位置,然后找到第二小的数,把它和第二位书交换位置~以此类推~
代码:
//选择排序
private static void selectSort(int[] a) {
for(int i=0;i<a.length-1;i++){
int k=i;
for(int j=i+1;j<a.length;j++){
if (a[j]<a[k]) {
k=j;
}
}
if (k!=i) {
swap(a, i, k);
}
}
}
时间复杂度:T(n)=O(
n²),空间复杂度:S(n)=O(1)