• 【数据结构与算法】三种简单排序算法,包括冒泡排序、选择排序、插入排序算法


    目录

    冒泡排序算法

    选择排序算法

    插入排序算法

    快速排序算法

    二分查找算法 


    冒泡排序算法

    冒泡排序他是通过双重循环对每一个值进行比较,将小的值向后移动,以达到最终排序的结果,他的时间复杂度为O(n^2)。

    1. /**
    2. * 冒泡排序
    3. * @param arr
    4. */
    5. public static void bubbleSort(int[] arr){
    6. int l =arr.length;
    7. for (int i = 0; i 1 ; i++) {
    8. for (int j = 0; j 1 ; j++) {
    9. if (arr[j]>arr[j+1]){
    10. int temp =arr[j];
    11. arr[j]=arr[j+1];
    12. arr[j+1]=temp;
    13. }
    14. }
    15. }
    16. }

    选择排序算法

    选择排序也是进行两次循环遍历,获取最大或最小的值,然后进行交换。他的时间复杂度也为O(n^2)。

    1. /**
    2. * 选择排序算法
    3. * @param arr
    4. */
    5. public static void selectSort(int[] arr){
    6. int l =arr.length;
    7. for (int i = 0; i 1 ; i++) {
    8. int minIndex =i;
    9. for (int j = i+1; j
    10. if (arr[j]
    11. minIndex=j;
    12. }
    13. }
    14. int temp =arr[i];
    15. arr[i]=arr[minIndex];
    16. arr[minIndex]=temp;
    17. }
    18. }

    插入排序算法

    插入排序是将一个数在前面已经排好的有序列表中进行遍历,插入到符合顺序的地方。以此来获得一个长度+1的有序列表。他的时间复杂度也为O(n^2)。

    1. /**
    2. * 插入排序算法
    3. * @param arr
    4. */
    5. public static void insertSort(int[] arr){
    6. int l =arr.length;
    7. for (int i = 1; i
    8. int insert=arr[i];
    9. int j =i-1;
    10. while (j>=0&&arr[j]>insert){
    11. arr[j+1]=arr[j];
    12. j--;
    13. }
    14. arr[j+1]=insert;
    15. }
    16. }

    快速排序算法

    快速排序算法通过一个方法将数组分为两个子数组,这两个数组的值分别为大于pivot的和小于pivot的,在通过对这两个数组进行递归,最终形成一个有序数组。他的时间复杂度相对于前面几个要低一些,为O(nlogn)。

    1. /**
    2. * 快速排序算法
    3. * @param arr
    4. * @param low
    5. * @param high
    6. */
    7. public static void quickSort(int[] arr, int low, int high) {
    8. if (low
    9. int pivot =partition(arr,low,high);
    10. quickSort(arr,low,pivot-1);
    11. quickSort(arr,pivot+1,high);
    12. }
    13. }
    14. /**
    15. *将数组分为两个子数组
    16. * @param arr
    17. * @param low
    18. * @param high
    19. * @return
    20. */
    21. private static int partition(int arr[], int low, int high) {
    22. int pivot = arr[high];
    23. int i = low - 1;
    24. for (int j = low; j < high; j++) {
    25. if (arr[j] < pivot) {
    26. i++;
    27. swap(arr, i, j);
    28. }
    29. }
    30. swap(arr, i + 1, high);
    31. return i + 1;
    32. }
    33. /**
    34. * 交换
    35. * @param arr
    36. * @param i
    37. * @param j
    38. */
    39. private static void swap(int arr[], int i, int j) {
    40. int temp = arr[i];
    41. arr[i] = arr[j];
    42. arr[j] = temp;
    43. }

    二分查找算法 

    二分查找算法必须是在有序数组中,才能实现,他的实现思路就是,通过对查找数组的中间值,判断该值大于还是小于想要查找的数。如果大于则在该数的左半区进行二分查找,如果小于在是查找右半区,直到这个中间值等于你要查找的数为止。他的时间复杂度为O(log2n)

    1. /**
    2. * 二分查找
    3. * @author CC
    4. * @version 1.0
    5. * @since2023/10/17
    6. */
    7. public class Search {
    8. public static void main(String[] args) {
    9. int[] nums ={1,5,7,8,11,16,21,33,66,121};
    10. System.out.println(binarySearch(nums, 21));
    11. }
    12. public static int binarySearch(int[] nums,int target){
    13. if (nums==null||nums.length==0){
    14. return -1;
    15. }
    16. int l =0,r=nums.length-1;
    17. while (l<=r){
    18. int mid =l+(r-l)/2;
    19. if (nums[mid]==target){
    20. return mid;
    21. }else if (nums[mid]>target){
    22. r=mid-1;
    23. }else if (nums[mid]
    24. l=mid+1;
    25. }
    26. }
    27. return -1;//没找到
    28. }
    29. }

    未完待续......

  • 相关阅读:
    61.【快速排序法详解】
    Java+SpringBoot+Vue自习室预约系统全栈开发
    计算机视觉与深度学习 | 视觉里程计理论
    “阿里巴巴API:获取商品详情,掌握市场动态,提升竞争力!“
    【毕业设计】树莓派实现口罩佩戴检测识别 - 单片机 物联网 机器视觉
    还记得2048怎么玩吗?快来玩会儿(摸鱼)吧
    电影票小程序插件 电影票CPS插件 电影票微信小程序插件
    【毕业设计】深度学习YOLO抽烟行为检测 - python opencv
    MySQL基础篇【命名规范】
    用HTML+CSS+JS做一个漂亮简单的公司网站(JavaScript期末大作业)
  • 原文地址:https://blog.csdn.net/c1390527393/article/details/133688517