-
排序:
- 内部排序:数据记录在内存中进行排序
- 外部排序:排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bczk26x1-1629128880601)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/57331645-3113-4e8e-82c0-e5195be565e3/Untitled.png)]](https://img-blog.csdnimg.cn/76b4bbe3de364e66ab43c5805f285f69.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUwODE1NA==,size_16,color_FFFFFF,t_70) -
冒泡排序:
- 冒泡排序,是通过每一次遍历获取最大/最小值
- 将最大值/最小值放在尾部/头部
- 然后除开最大值/最小值,剩下的数据在进行遍历获取最大/最小值
public static void main(String[] args) {
int arr[] = {8, 5, 3, 2, 4};
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q11F2n8n-1629128880604)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1a3adcc4-6184-4685-b5e0-876711b0ded1/Untitled.png)]](https://img-blog.csdnimg.cn/51a5a03b03d74a309958ddc1a622a24f.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUwODE1NA==,size_16,color_FFFFFF,t_70) -
选择排序:
- 将第一个值看成最小值
- 然后和后续的比较找出最小值和下标
- 交换本次遍历的起始值和最小值
- 说明:每次遍历的时候,将前面找出的最小值,看成一个有序的列表,后面的看成无序的列表,然后每次遍历无序列表找出最小值
public static void main(String[] args) {
int arr[] = {6, 5, 3, 2, 4};
for (int i = 0; i < arr.length; i++) {
int min = arr[i];
int index = i;
for (int j = i + 1; j < arr.length; j++) {
if (min > arr[j]) {
min = arr[j];
index = j;
}
}
int temp = arr[i];
arr[i] = min;
arr[index] = temp;
}
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-myCAgbfU-1629128880607)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a7e1ccaa-973d-4935-96ef-aefcb1b0f434/Untitled.png)]](https://img-blog.csdnimg.cn/badf9eac9fdf433f8099b655ac48bf81.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUwODE1NA==,size_16,color_FFFFFF,t_70) -
插入排序:
- 默认从第二个数据开始比较
- 如果第二个数据比第一个小,则交换。然后在用第三个数据比较,如果比前面小,则插入(狡猾)。否则,退出循环
- 说明:默认将第一数据看成有序列表,后面无序的列表循环每一个数据,如果比前面的数据小则插入(交换)。否则退出
public static void main(String[] args) {
int arr[] = {7, 5, 3, 2, 4};
for (int i = 1; i < arr.length; i++) {
for (int j = i; j > 0; j--) {
if (arr[j] < arr[j - 1]) {
int temp = arr[j - 1];
arr[j - 1] = arr[j];
arr[j] = temp;
} else {
break;
}
}
}
}
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tx1uckN9-1629128880609)(https://s3-us-west-2.amazonaws.com/secure.notion-static.com/dd416ca2-59ae-488d-be80-2c34e825b8b3/Untitled.png)]](https://img-blog.csdnimg.cn/671b422f79954b15b27d860b8caa3309.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTUwODE1NA==,size_16,color_FFFFFF,t_70) -
快速排序:
- 确认列表第一个数据为中间值,第一个值看成空缺(低指针空缺)
- 然后在剩下的队列中,看成有左右两个指针(高低)
- 开始高指针向左移动,如果遇到小于中间值的数据,则将这个数据赋值到低指针空缺,并且将高指针的数据看成空缺值(高指针空缺)。然后先向右移动一下低指针,并且切换低指针移动
- 当低指针移动到大于中间值的时候,赋值到高指针空缺的地方。然后先高指针向左移动,并且切换高指针移动。重复c、d操作
- 直到高指针和低指针相等时退出,并且将中间值赋值给对应指针位置。
- 然后将中间值的左右两边看成行的列表,进行快速排序操作
public void quickSort(int [] arr,int L,int R){
int i = L;
int j = R;
int mid = arr[(L+R)/2];
while(i<=j){
while(arr[i] > mid){
i++;
}
while(arr[j] < mid){
j--;
}
if(i<=j){
swap(arr,i,j);
i++;
j--;
}
}
if(L<j){
quickSort(arr,L,j);
}
if(i<R){
quickSort(arr,i,R);
}
}
public void swap(int[] arr,int i,int j){
int temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
quickSort(arr,0,arr.length-1);
}
|