欢迎来到南方有乔木的博客!!!
博主主页:点击点击!戳一戳!!
博主名:南方有乔木
博主简介:
一名在校大学生,正在努力学习Java语言编程。穷且意坚,不坠青云之志,希望能在编程的世界里找到属于自己的光。
跪谢帅气or美丽的朋友们能够帮我点赞! 请对文中内容请多多指教!!!
目录
一.排序算法简介
排序的定义:
排序就是将一组无序的数据排序成有序的序列的操作。
排序分类:
1.内部排序
内部排序是指待排序序列全部存放在内存中的进行的排序过程。这种方法适用于数量不大的数据元素的排序。
2.外部排序
外部排序是指需要排序的数据非常的多,它们必须存储在外部的存储器上,这种排序的过程需要访问外部存储器,这种排序就是外部排序。
排序的稳定性
概念:
对于一组数据元素序列,使用某种排序算法对它进行排序,若相同数据之间的前后位置排序后和未排序之前是相同的,我们就称这种排序算法是具有稳定性的。
比如 关键字序列:
1,5a,3,7,5b,9,12
这个序列中有两个5,我们将第一个数字记成5a,第二个5记为5b,若排序后:
1,3,5a,5b,7,9,12
5a还是在5b之前,相对位置不变,称排序所用的算法具有稳定性
若排序后:
1,3,5b,5a,7,9,12
5b变到了5a之前,相对位置发生变化,则称排序的算法不具有稳定性。
二.排序算法的分类
常见的七大基于比较的排序算法一共有七种,分别是,冒泡排序
直接选择排序,希尔排序,快速排序,堆排序,直接插入排序,归并排序。
分类示意图:
根据它们的特性这七种算法又被分成了四类
1.选择排序:直接选择排序,堆排序
2.插入排序:直接插入排序,希尔排序
3.交换排序:冒泡排序,快速排序
4.归并排序:归并排序
三.七大排序算法的实现
1.冒泡排序(交换排序之一)
示意图:
原理:
在无序区间中,将两两相邻的元素进行比较,每一轮比较出最大的一个元素,交换到有序区间。
步骤:
1.冒泡排序的主要思想是两两比较,因此先确定要比较多少次,因为前面经过比较只剩最后一个元素的时候,最后一个元素必定已经有序,因此,如果有n个元素,只需要比较n-1次。
2.进行两两比较的过程,从第一个元素开始,把它与它两两相邻的元素比较,把大的换到右边,一直比较,直到把数组里最大的元素换到最右边,因为只需要比较到倒数第二个元素的时候,它与倒数第一个元素比较已经可以换到最右边,因此下标只需要到数组的倒数第二个就行。
实现:
import java.util.Arrays;
public class BubbleSort {
//实现数组内两元素交换
public static void swap(int[]array,int i,int j){
int temp=array[i];
array[i]=array[j];
array[j]=temp;
}
//冒泡排序
public static void bubbleSort(int[]array){
int size=array.length;
//一开始控制进行两两比较的次数,最后一轮必定有序,所有比较次数为size-1次
for(int i=0;i<size-1;i++){
//一开始假设已经有序
boolean sort=true;
//两两比较过程