数据结构-排序8.21

1.线性结构

数据之间存在一对一的关系(前驱、后件):线性表、数组、栈、队列。
分为顺序存储结构(顺序表)和链式存储结构(链表)。
非线性结构:树、图、二维数组。

2.栈

先进后出,后进先出。
链表实现栈(动态栈)。
数组实现栈(静态栈)。
练习: 数组实现栈,完成String类型的四则运算。

3.链表

data和next。
功能:
添加,
在这里插入图片描述

插入,
在这里插入图片描述
在这里插入图片描述

修改,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

删除
在这里插入图片描述

查看
在这里插入图片描述
在这里插入图片描述

双向链表

1.末尾添加
在这里插入图片描述
在这里插入图片描述
2.删除,修改,查询和单链表类似。
3.环形单链表:
在这里插入图片描述
在这里插入图片描述
查看:
在这里插入图片描述

解决约瑟夫问题

在这里插入图片描述
在这里插入图片描述
面试题,反转链表:
在这里插入图片描述

4.队列

常见队列:顺序队列、链式队列、循环队列、阻塞队列、并发队列。
方法:enqueue(),outqueue();
假溢出:head和tail相同且指向最后一个元素的下一个;
真溢出:满了,只有tail指向最后一个元素的下一个位置。

  • 顺序队列:
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4.稀疏数组

在这里插入图片描述
在这里插入图片描述
稀疏数组第一行不记录有效数据。
在这里插入图片描述

5.各类时间复杂度

在这里插入图片描述

6.基数排序

在这里插入图片描述
在这里插入图片描述

7.冒泡排序

不再赘述

8.快速排序

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
感觉上述逻辑不清晰,清晰版如下:

package com.dataStructure;

import java.util.Arrays;

public class QuickSort {
    public static void main(String[] args) {
        int[] a=new int[]{2,5,70,5,4};
        QuickSort q=new QuickSort();
        q.qucikSort(a,0,4);
        System.out.println(Arrays.toString(a));
    }
        public  void qucikSort(int [] arr,int start, int end){
            int i=start,j=end;//设置数组两头两个指针
            int pivot=arr[start];//选第一个数为基准

            while(i<=j){
                while(arr[i]<pivot){
                    i++;
                }
                while(arr[j]>pivot){
                    j--;
                }
                if(i<=j){
                    swap(arr,i,j);
                    i++;
                    j--;
                }
            }
            if(start<j)
                qucikSort(arr,start,j);
            if(i<end)
                qucikSort(arr,i,end);

        }

        //交换数组中两个元素
        public void swap(int[] arr,int i,int j){
            int temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }
}

9.插入排序

在这里插入图片描述

import java.util.Arrays;

public class InsertSort {
    public static void main(String[] args) {
        int[] a =new int[]{5,4,8,2,1};
        sort(a);
        System.out.println(Arrays.toString(a));
    }
    public static void sort(int[] a){
        for (int i =1;i<a.length;i++){
            for (int j=i;j>=1;j--){
                if (a[j]<a[j-1]){
                    int t=a[j];
                    a[j]=a[j-1];
                    a[j-1]=t;
                }else{
                    break;
                }
            }
        }
    }
}

10.选择排序

package com.dataStructure;

import java.util.Arrays;

public class SelectSort {
    public static void main(String[] args) {
        int[] a =new int[]{5,4,8,2,1};
        sort(a);
        System.out.println(Arrays.toString(a));
    }
    public static void sort(int[] a){
        for (int i =0;i<a.length-1;i++){
            int p=i,j;
            for (j=i+1;j<a.length;j++){
                if(a[p]>a[j]){
                    p=j;
                }
            }
            int temp=a[p];
            a[p]=a[i];
            a[i]=temp;
        }
    }
}

11.希尔排序

在这里插入图片描述
其中,每组在进行插入排序。增量每次除二,当增量为一时,排序完成。
在这里插入图片描述

分治

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值