当前位置: 首页 > news >正文

某qq非主流个性网源码qq空间网站源码dede内核+采集规则同城约会软件哪个好

某qq非主流个性网源码qq空间网站源码dede内核+采集规则,同城约会软件哪个好,宜昌市住房和城乡建设厅官方网站,网站开发赚钱吗声明:该专栏本人重新过一遍java知识点时候的笔记汇总,主要是每天的知识点题解,算是让自己巩固复习,也希望能给初学的朋友们一点帮助,大佬们不喜勿喷(抱拳了老铁!) Java学习day05:排序&#xff0…

声明:该专栏本人重新过一遍java知识点时候的笔记汇总,主要是每天的知识点+题解,算是让自己巩固复习,也希望能给初学的朋友们一点帮助,大佬们不喜勿喷(抱拳了老铁!)


Java学习day05:排序,选择、冒泡、快速、二分、杨辉三角

一、选择排序

1.原理:

找到最小值的索引,然后和第1个数据进行交换。再找除了第一个数据以外的最小值的索引。然后和第二个数据交换

2.代码示例:

public class Demo1 {public static void main(String[] args) {//选择排序int[] arr = {3,4,1,5,2};/*** i=0 0<4 true minIndex=0  *    进入内层的for循环*    j=0 0<5 true arr[0] >arr[0]false j++*    j=1 1<5 true arr[0] >arr[1] false j++*    j=2 2<5 true arr[0]>arr[2]true minIndex=2 j++*    j=3 3<5 true arr[2]>arr[3]fasle j++*    j=4 4<5 true arr[2]>arr[4] fasle j++*    j=5 5<5fasle循环结束*    执行交换代码*    temp = arr[2]=1*    arr[2] = arr[0] {3,4,3,5,2}*    arr[0] = 1  {1,4,3,5,2} i++* i=1 1<4 true minIndex =1*      ......* */for (int i = 0; i < arr.length - 1; i++) {//控制的是轮数int minIndex = i;for (int j = i; j < arr.length; j++) {//遍历咱们的数据找到最小值的索引的if (arr[minIndex] > arr[j]) {minIndex = j;}}//交换位置int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;}System.out.println(Arrays.toString(arr));}}

 代码写的非常详细,大家把代码看懂就好

二、冒泡排序

 1.原理:

从小到大排序,比较两个相邻的数据,如果左边比右边元素大就交换位置。如果左边比右边小,就不变

2.代码示例

public class Demo2 {public static void main(String[] args) {//冒泡 排序和索引没有关系int[] arr = {1,5,2,3};for (int i = 0; i < arr.length - 1; i++) {//最内层的循环两两比较交换位置//4-1-i=>i=0  第1轮   3次//4-1-i=>i=1 第2轮   2次//4-1-i=>i=2 第3轮  1次for (int j = 0; j < arr.length - 1 - i; j++) {if (arr[j] > arr[j + 1]) {//交换位置int temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}System.out.println(Arrays.toString(arr));}
}

3.二者比较

这里要提的一点,区分选择排序和冒泡排序,选择排序是每次遍历所有数据,找出最大的那个并和第一个交换,所以代码里是内层for循环结束后在外层for循环里交换,而冒泡排序则是每次把相邻的两个数进行比较,如果前面的大则交换位置,这样比较下去最终最大的那个数就会冒出来,这也就是为什么,冒泡是在内存for循环里交换,并且变量j的初始值为0,而不是i。

三、快速排序

1.原理

快速排序是一种常用的排序算法,它的基本思想是通过分治的方法将一个大问题拆分成若干个小问题来解决,选择一个基准元素(通常选择数组的第一个元素)将数组分成两部分,一部分小于基准元素,一部分大于基准元素,对这两部分分别进行快速排序递归地重复以上步骤,直到每个子数组只有一个元素或者为空。

2.代码示例

举个例子,假设我们要对数组[5, 3, 8, 2, 1, 9]进行快速排序:选择基准元素为5,将数组分成[3, 2, 1]和[8, 9]两部分,对两部分分别进行快速排序,得到[1, 2, 3]和[8, 9],最后得到排序后的数组为[1, 2, 3, 5, 8, 9]

public class QuickSort {public static void main(String[] args) {int[] arr = {5, 3, 8, 2, 1, 9};quickSort(arr, 0, arr.length - 1);System.out.println("排序后的数组:");for (int num : arr) {System.out.print(num + " ");}}public static void quickSort(int[] arr, int low, int high) {if (low < high) {int pivot = partition(arr, low, high); // 获取基准元素的位置quickSort(arr, low, pivot - 1); // 对基准元素左边的子数组进行快速排序quickSort(arr, pivot + 1, high); // 对基准元素右边的子数组进行快速排序}}public static int partition(int[] arr, int low, int high) {int pivot = arr[low]; // 选择第一个元素作为基准元素while (low < high) {while (low < high && arr[high] >= pivot) {high--;}arr[low] = arr[high]; // 将比基准元素小的元素移到低位while (low < high && arr[low] <= pivot) {low++;}arr[high] = arr[low]; // 将比基准元素大的元素移到高位}arr[low] = pivot; // 将基准元素放到最终位置return low; // 返回基准元素的位置}
}

另外拓展一小点:java面向对象里封装了sort方法,该方法底层就是快速排序

int[] arr=new int[]{123,523,1,4,244,14231,122};
Arrays.sort(arr);//sort的底层是快排,效率最高
System.out.println(Arrays.toString(arr));

四、杨辉三角 

1.什么是杨辉三角

杨辉三角是一个由数字排列成的三角形,其中每个数字是它上方两个数字的和。它的第n行有n个数字,第一个和最后一个数字都是1,其他数字是上一行相邻两个数字的和。

举个例子,下面是一个4行的杨辉三角:
       1
      1 1
     1 2 1
    1 3 3 1 

 2.代码示例

如何生成指定行数的杨辉三角?通过使用二维数组来存储杨辉三角的每个数字,然后利用动态规划的思想,根据每个数字等于上一行两个相邻数字的和的规律来生成杨辉三角。

public class PascalTriangle {public static void main(String[] args) {int numRows = 5;generatePascalTriangle(numRows);}public static void generatePascalTriangle(int numRows) {int[][] triangle = new int[numRows][];for (int i = 0; i < numRows; i++) {triangle[i] = new int[i + 1];triangle[i][0] = 1; // 每行的第一个数字为1triangle[i][i] = 1; // 每行的最后一个数字为1for (int j = 1; j < i; j++) {triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j]; // 每个数字等于上一行两个相邻数字的和}}// 打印杨辉三角for (int i = 0; i < numRows; i++) {for (int j = 0; j <= i; j++) {System.out.print(triangle[i][j] + " ");}System.out.println();}}
}

 五、二分法查找算法

1.原理:

二分法查找算法是一种高效的查找算法,它适用于已排序的数组。如何使用二分法查找算法在有序数组中查找指定的目标值?通过不断缩小查找范围,将数组分成两部分,并与目标值进行比较,从而确定目标值在数组中的位置。如果找到目标值,返回它在数组中的索引;如果找不到目标值,返回-1。

 2.具体步骤:

具体步骤如下:
1)选择数组的中间元素
2)如果中间元素等于目标值,则查找成功
3)如果中间元素大于目标值,则在数组的前半部分继续查找
4)如果中间元素小于目标值,则在数组的后半部分继续查找
5)重复以上步骤,直到找到目标值或者数组为空

3.代码示例

举个例子,假设我们要在有序数组[1, 2, 3, 5, 8, 9]中查找数字5:选择中间元素为3,由于3小于5,所以在数组的后半部分[5, 8, 9]中继续查找,选择中间元素为8,由于8大于5,所以在数组的前半部分[5]中继续查找,找到目标值5,查找成功

public class BinarySearch {public static void main(String[] args) {int[] arr = {1, 2, 3, 5, 8, 9};int target = 5;int index = binarySearch(arr, target);if (index != -1) {System.out.println("目标值 " + target + " 在数组中的索引为 " + index);} else {System.out.println("目标值 " + target + " 不在数组中");}}public static int binarySearch(int[] arr, int target) {int low = 0;int high = arr.length - 1;while (low <= high) {int mid = (low + high) / 2;if (arr[mid] == target) {return mid; // 找到目标值,返回索引} else if (arr[mid] < target) {low = mid + 1; // 目标值在数组的后半部分} else {high = mid - 1; // 目标值在数组的前半部分}}return -1; // 目标值不在数组中}
}

 今天没有习题,理解为主,其中选择排序冒泡排序是现在必须要理解的,至于后面的快速排序、杨辉三角、二分查找等,则先理解,后面还会再次讲解。

http://www.15wanjia.com/news/182370.html

相关文章:

  • 《网站开发实践》 实训报告百度搜索榜排名
  • 网站的落地页微信网站 详解
  • 织梦网站统计一级域名 网站建设
  • 营销推广网站网上定做相册
  • 张店网站制作哪家好对小米网站的建设意见
  • 张家界做旅游网站有哪些有趣的网站
  • 如何开发一个网站wordpress重定向过多
  • 在线商城网站模板个人网站构建
  • 网站备案怎么做超链接优化设计高中
  • 镜像网站是怎么做的兰州需要做网站的公司有哪些
  • 平湖网站制作wordpress小型博客
  • 百度宿迁市建设局网站企业网站备案信息查询系统
  • 海口网站建设电话2二级域名免费
  • 有没有做市场评估的网站网站建设新手
  • 重庆市建设工程造价管理总网站jsp做网站用什么封装字符串
  • 网站建设报价包括哪些设计深圳2023
  • 石家庄今天又发现一例免费做优化的网站
  • 营口市城乡住房建设局网站深圳品牌网站建设
  • 传统文化网站建设方案烟台北京网站建设公司哪家好
  • 哪家做网站做得好公司网站建设需要哪些内容
  • 适合小型网络公司的建站方式可以为简单网站页面设计
  • 布吉网站建设哪家技术好网站分成推广怎么做
  • 濮阳市网站建设软件工程主要是学什么
  • 广州网站建设广州网络推广公司接go语言网站开发
  • 开发施工建设网站审核众筹网站功能
  • html做音乐网站模板网站域名需要每年续费
  • 凉山网站建设腾讯微博同步到wordpress
  • 深圳网站建设高端设计网站中文域名到期
  • 用wordpress做站群高权重域名做网站
  • 建设厅网站进不去市场营销管理是做什么的