java基数排序 数组_万字长文带你掌握Java数组与排序,代码实现原理都帮你搞明白!...

查找元素索引位置

基本查找

根据数组元素找出该元素第一次在数组中出现的索引

public class TestArray1 {

public static void main(String[] args) {

//定义一个数组

int[] arr={10,20,70,10,90,100,1,2};

//根据元素查找出该元素在数组中第一次出现的索引

int index=getIndexByEle(arr,2);

System.out.println("该元素第一次在数组中出现的索引是:"+index);

}

private static int getIndexByEle(int[] arr, int ele) {

//遍历数组,去查找

for (int i = 0; i < arr.length; i++) {

if (ele==arr[i]){

return i;

}

}

return -1;//如果我们没有找到这个元素那么就返回-1

}

}

案例中查找元素2的索引,索引为7;

运行后返回结果正确:

c4894b5133f29617eef723145511e517.png

二分查找

使用二分查找查找出该元素在数组中第一次出现的索引

前提:该数组的元素必须有序

思想:每一次都查找中间的元素,比较大小就能减少一半的元素

cf81e6db03772250165ee0e1e341baf4.png

具体代码实现:

public class TestArray2 {

public static void main(String[] args) {

//二分查找:前提是数组元素必须有序

int[] arr={10,20,30,40,50,60,70,80,90};

int index=getIndexByEle(arr,40);

System.out.println("该元素的索引是:"+index);

}

private static int getIndexByEle(int[] arr, int ele) {

//定义最小索引,中间索引,最大索引

int minIndex=0;

int maxIndex=arr.length-1;

int centerIndex=(minIndex+maxIndex)/2;

while (minIndex<=maxIndex){

//如果需查找元素等于中间索引所对应元素,返回中间元素,表示找到

if (ele==arr[centerIndex]){

return centerIndex;

}

//如果需查找元素大于中间索引所对应元素,移动最小索引至中间索引处

else if (ele>arr[centerIndex]){

minIndex=centerIndex+1;

}

//如果需查找元素小于中间索引所对应元素,移动最大索引至中间索引处

else if (ele

maxIndex=centerIndex-1;

}

//重新计算中间索索引

centerIndex=(minIndex+maxIndex)/2;

}

return -1;//如果没有找到,就返回-1

}

}

案例中查找元素为40,索引为3;

运行后返回结果正确:

523ee41041dd27ad1495d4f4d9de9035.png

八大排序方法

冒泡排序

原理:数组元素两两比较,交换位置,大元素往后放,经过一轮比较后,最大的元素,就会被排到数组的最后

图解:

356188e6e43f45331054017295f30cb8.png

代码部分:

先进行第一轮排序,看看效果:

public class ArraySort1 {

public static void main(String[] args) {

//原理:数组元素两两比较,前面元素大于后面元素则交换,否则不交换,每经过一轮,最大的元素会排到最后

int[] arr={24,69,80,57,13};

//第一轮比较,遍历数组

for (int i = 0; i < arr.length-1; i++) {

//从从第0个元素开始,前一个元素与后一个元素比较

if (arr[i]>arr[i+1]){

//满足条件则交换位置,利用temp中间变量寄存元素

int temp=arr[i];

arr[i]=arr[i+1];

arr[i+1]=temp;

}

}

//输出数组

System.out.println(Arrays.toString(arr));

}

}

44e91ee4d6d9132d5c584262a11b81fe.png

下面进行多轮排序:

代码部分

笨方法:多次for循环,比较繁琐,重复循环,语句没营养,看看就好,主要是得能想到,为嵌套循环做准备

public class ArraySort1 {

public static void main(String[] args) {

//原理:数组元素两两比较,前面元素大于后面元素则交换,否则不交换,每经过一轮,最大的元素会排到最后

int[] arr={24,69,80,57,13};

//第一轮比较,遍历数组

for (int i = 0; i < arr.length-1; i++) {

//从从第0个元素开始,前一个元素与后一个元素比较

if (arr[i]>arr[i+1]){

//满足条件则交换位置,利用temp中间变量寄存元素

int temp=arr[i];

arr[i]=arr[i+1];

arr[i+1]=temp;

}

}

//输出数组

System.out.println(Arrays.toString(arr));

//第二轮比较,遍历数组

for (int i = 0; i < arr.length-1-1; i++) {

if (arr[i]>arr[i+1]){

int temp=arr[i];

arr[i]=arr[i+1];

arr[i+1]=temp;

}

}

//输出数组

System.out.println(Arrays.toString(arr));

//第三轮比较,遍历数组

for (int i = 0; i < arr.length-1-1-1; i++) {

if (arr[i]>arr[i+1]){

int temp=arr[i];

arr[i]=arr[i+1];

arr[i+1]=temp;

}

}

//输出数组

System.out.println(Arrays.toString(arr));

//第四轮比较,遍历数组

for (int i = 0; i < arr.length-1-1-1-1; i++) {

if (arr[i]>arr[i+1]){

int temp=arr[i];

arr[i]=arr[i+1];

arr[i+1]=temp;

}

}

//输出数组

System.out.println(Arrays.toString(arr));

}

}

b0bc838cf9cb3b9512e736c85c34ee88.png

使用嵌套循环(语句精简,没有废话):

public class ArraySort1 {

public static void main(String[] args) {

//原理:数组元素两两比较,前面元素大于后面元素则交换,否则不交换,每经过一轮,最大的元素会排到最后

int[] arr={24,69,80,57,13};

//嵌套for循环,外层循环轮数,内层对每一轮内元素进行比较

for (int i = 0; i < arr.length - 1; i++) {

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));

}

1fc12de30b2e71e94628f4f83e9db3bc.png

冒泡排序就介绍到这里~~~

选择排序

原理:从0索引处开始,依次和后面的元素进行比较,小的元素往前放,经过一轮比较后,最小的元素就会出现在最小索引处

图解:

aa902bc21076c3b40a3625b9b5096832.png

代码部分:多轮排序(优化前)

public class ArraySort2 {

public static void main(String[] args) {

//原理:从0索引处开始,依次个后面的元素进行比较,小的元素往前放,经过一轮比较,最小的元素就出现在最小索引处

int[] arr={24,69,80,57,13};

//第一轮比较,从0索引处开始比

int index=0;

for (int i = 1; i < arr.length; i++) {

if (arr[index]>arr[i]){

int temp=arr[index];

arr[index]=arr[i];

arr[i]=temp;

}

}

System.out.println(Arrays.toString(arr));

//第二轮

index=1;

for (int i = 1+index; i < arr.length; i++) {

if (arr[index]>arr[i]){

int temp=arr[index];

arr[index]=arr[i];

arr[i]=temp;

}

}

System.out.println(Arrays.toString(arr));

//第三轮

index=2;

for (int i = 1+index; i < arr.length; i++) {

if (arr[index]>arr[i]){

int temp=arr[index];

arr[index]=arr[i];

arr[i]=temp;

}

}

System.out.println(Arrays.toString(arr));

//第四轮

index=3;

for (int i = 1+index; i < arr.length; i++) {

if (arr[index]>arr[i]){

int temp=arr[index];

arr[index]=arr[i];

arr[i]=temp;

}

}

System.out.println(Arrays.toString(arr));

}

}

191be0ce98fe5be41117dc902fb7a102.png

优化代码:嵌套循环:

public class ArraySort2 {

public static void main(String[] args) {

//原理:从0索引处开始,依次个后面的元素进行比较,小的元素往前放,经过一轮比较,最小的元素就出现在最小索引处

int[] arr={24,69,80,57,13};

//第一轮比较,从0索引处开始比

for (int index = 0; index < arr.length-1; index++) {

for (int i = 1+index; i < arr.length; i++) {

if (arr[index]>arr[i]){

int temp=arr[index];

arr[index]=arr[i];

arr[i]=temp;

}

}

}

System.out.println(Arrays.toString(arr));

}

17e121c18eee88e57e95f7f30d7c9ad8.png

选择排序就介绍到这里~~~

直接插入排序

原理:从1索引处开始,将后面的元素与前一位比,小于前一位则交换,再与前一位比,如果小于再交换,如此循环,插入之前的有序列表中使之仍保持有序

53e1bd188621bac5a51005a880d7f346.png

(方法1):代码实现:

public class ArraySort3 {

public static void main(String[] args) {

//直接插入排序:从1索引处开始,将后面的元素,插入之前的有序列表中使之仍保持有序

int[] arr={3,2,1,0,10,20,30,7,8};

//外层循环定义轮次

for (int i = 1; i < arr.length; i++) {

//内层循环进行比较插入

int j=i;

while (j>0 && arr[j]

int temp=arr[j];

arr[j]=arr[j-1];

arr[j-1]=temp;

j--;

}

}

System.out.println(Arrays.toString(arr));

}

}

e44fdb920834379faeff07a63bd5fc9e.png

(方法2)代码实现:

public class ArraySort3 {

public static void main(String[] args) {

//直接插入排序:从1索引处开始,将后面的元素,插入之前的有序列表中使之仍保持有序

int[] arr={3,2,1,0,10,20,30,7,8};

//外层循环定义轮次

for (int i = 0; i < arr.length; i++) {

for (int j = i; j >0 ; j--) {

if (arr[j]

int temp=arr[j];

arr[j]=arr[j-1];

arr[j-1]=temp;

}

}

}

System.out.println(Arrays.toString(arr));

}

由于很多地方需要使用前后元素值交换,因此封装成一个方法:代码如下:

public static void swapValue(int[] arr,int i,int j){

int temp=arr[i];

arr[i]=arr[j];

arr[j]=temp;

}

使用自己封装的方法:

for (int i = 0; i < arr.length; i++) {

for (int j = i; j >0 ; j--) {

if (arr[j]

/*

int temp=arr[j];

arr[j]=arr[j-1];

arr[j-1]=temp;

*/

//直接调用交换方法,封装思想

swapValue(arr,j,j-1);

}

}

}

直接插入排序就介绍到这里~~~

希尔排序

希尔排序又称缩小增量排序

基本思想:先将原表按增量ht分组;每个子文件按照直接插入法排序。同样,用下一个增量ht/2将文件再分为自问见,在直接插入法排序。直到ht=1时整个文件排好序。

关键:选择合适的增量。

希尔排序算法9-3:可以通过三重循环来实现。

图示:

09c5d99bd60308dcc01ca20192e6eea5.png

将数组按步长为5的间隔两两分为一组,每组两个元素进行比较大小,小的放置于前面,大的放置于后面;

由此排序一次后,大致可以将整个数组中较小的元素放在前面,较大的放在后面。

下面数组长度为8,第一次间隔取4,第二次间隔取2,第三次间隔取1,具体实现见下图:

c029d709f04cd74764b8c64f10e169f9.png

代码实现(使用克努特序列,合理选择增量):

public class ArraySort4 {

public static void main(String[] args) {

//希尔排序,对插入排序的优化,核心思想就是合理的选取增量,经过一轮排序后,就会让序列大致有序

//然后不断的缩小增量,进行插入排序,直到增量为1整个排序结束

//直接插入排序,其实就是增量为1的希尔排序

int[] arr={46,55,13,43,17,94,5,70,11,25,110,234,1,3,66};

shellSort(arr);

System.out.println(Arrays.toString(arr));

}

private static void shellSort(int[] arr) {

//定义一个增量

/*

//第一轮

int h=4;

for (int i = h; i < arr.length; i++) {

for (int j = i; j > h-1 ; j-=h) {

if (arr[j]

swapValue(arr,j,j-h);

}

}

}

//第二轮

h=2;

for (int i = h; i < arr.length; i++) {

for (int j = i; j > h-1 ; j-=h) {

if (arr[j]

swapValue(arr,j,j-h);

}

}

}

//第三轮

h=1;

for (int i = h; i < arr.length; i++) {

for (int j = i; j > h-1 ; j-=h) {

if (arr[j]

swapValue(arr,j,j-h);

}

}

}

*/

//希尔排序核心代码

//希尔排序的思想,合理的选取增量

//第一次增量可以选取数组长度的一半,然后不断的减半

/*for (int h = arr.length / 2; h > 0; h /= 2) {

for (int i = h; i < arr.length; i++) {

for (int j = i; j > h - 1; j -= h) {

if (arr[j] < arr[j - h]) {

swapValue(arr, j, j - h);

}

}

}

}*/

//增量的选取选择数组长度的一半,还不是很合理,我们可以使用一种序列,叫做克努特序列

//int h = 1;

//h = h * 3 + 1; //1,4,13,40,121,364

//根据克努特序列选取我们的第一次增量

int jiange = 1;

while (jiange <= arr.length / 3) {

jiange = jiange * 3 + 1;

}

for (int h = jiange; h > 0; h = (h - 1) / 3) {

for (int i = h; i < arr.length; i++) {

for (int j = i; j > h - 1; j -= h) {

if (arr[j] < arr[j - h]) {

swapValue(arr, j, j - h);

}

}

}

}

}

//封装元素交换方法

public static void swapValue(int[] arr,int i,int j){

int temp=arr[i];

arr[i]=arr[j];

arr[j]=temp;

}

}

希尔排序就介绍到这里~~~

快速排序

原理:分治法:比大小,再分区

从数组中取出一个数,作为基准数

分区:将比这个数大或等于的书全放到他的右边,小于他的数全放到他的左边。

再对左右区间重复第二步,直到各区间只有一个数。

实现思路

将基准数挖出形成第一个坑

由后向前找比它小的数,找到后挖出此数填到前一个坑中

由前向后找比它大或等于的数,找到后也挖出此数填到前一个坑中。

再重复执行上述两步骤

c050009a916f4ec33f69a84adcedd906.png

代码实现:

public class ArraySort5 {

public static void main(String[] args) {

//定义一个数组

int[] arr={10,3,34,45,11,35,255,4,-1,-9,79,123};

quickSort(arr,0,arr.length-1);

System.out.println(Arrays.toString(arr));

}

//快速排序

public static void quickSort(int[] arr,int start,int end) {

//找出分左右两区的索引位置,然后对左右两区进行递归调用

if (start

int index=getIndex(arr,start,end);

quickSort(arr,start,index-1);

quickSort(arr,index+1,end);

}

}

//将基准数挖出形成第一个坑

//由后向前找比它小的数,找到后挖出此数填到前一个坑中

//由前向后找比它大或等于的数,找到后也挖出此数填到前一个坑中。

//再重复执行上述两步骤

private static int getIndex(int[] arr, int start, int end) {

int i=start;

int j=end;

int x=arr[i];

while (i

//由后向前找比它小的数,找到后挖出此数填到前一个坑中

while (i=x){

j--;

}

if (i

arr[i]=arr[j];

i++;

}

//由前向后找比它大或等于的数,找到后也挖出此数填到前一个坑中。

while (i

i++;

}

if (i

arr[j]=arr[i];

j--;

}

}

arr[i]=x;//把基准数填到最后一个坑

return i;

}

}

快速排序就介绍到这里~~~

归并排序

归并排序(Merge Sort)就是利用归并的思想实现排序的方法

原理:假设初始序列有N个记录,则可以看成是N个有序的子序列,每个子序列的长度为1,然后两两归并,得到N/2个长度为2或1的有序子序列,再两两归并。。。如此重复,直至得到一个长度为N的有序序列为止,这种排序方法称为2路归并排序

fa614d94f1bfefe6482ce46eea25e624.png

代码实现:

public class ArraySort6 {

public static void main(String[] args) {

//原始待排序数组

int[] arr={10,23,1,43,0,-3,1121,343,44,11,56,78,3,-1};

//我们先给一个左右两边是有序的一个数组,先来进行归并操作

//int[] arr={4,5,7,8,1,2,3,6};

//拆分

chaifen(arr,0,arr.length-1);

//归并

guiBing(arr,0,3,arr.length-1);

//输出原数组

System.out.println(Arrays.toString(arr));

}

private static void chaifen(int[] arr, int startIndex, int endIndex) {

//计算中间索引

int centerIndex=(startIndex+endIndex)/2;

if (startIndex

chaifen(arr,startIndex,centerIndex);

chaifen(arr,centerIndex+1,endIndex);

guiBing(arr,startIndex,centerIndex,endIndex);

}

}

private static void guiBing(int[] arr, int startIndex, int centerIndex, int enIndex) {

//定义一个临时数组

int[] tempArr=new int[enIndex-startIndex+1];

//定义左边数组的起始索引

int i=startIndex;

//定义右边数组的起始索引

int j=centerIndex+1;

//定义临时数组的起始索引

int index=0;

while (i<=centerIndex && j<=enIndex){

if (arr[i]<=arr[j]){

tempArr[index]=arr[i];

i++;

}else{

tempArr[index]=arr[j];

j++;

}

index++;

}

//处理剩余元素

while (i<=centerIndex){

tempArr[index]=arr[i];

i++;

index++;

}

while (j<=enIndex){

tempArr[index]=arr[j];

j++;

index++;

}

//将临时数组中的元素取到原数组中

for (int k = 0; k < tempArr.length; k++) {

arr[k+startIndex]=tempArr[k];

}

}

}

归并排序就介绍到这里~~~

基数排序

基数排序不同于之前的各类排序

前面的排序或多或少通过使用比较和移动记录来实现排序

而基数排序的实现不需要进行对关键字的比较,只需要对关键字进行“分配”与“收集”两种操作即可完成

下面通过图来解释:

第一次排序:按照个位进行分组

d26455066ff552e2b0580541bdbd758f.png

分组后结果:

17af1f5aa1c8d0f9b83f91146c3b1596.png

再将元素逐一取出:

72efa626839a48cc731f853e170ce216.png

第二次排序:根据十位上的数进行排序

0045badf3a79ac2b9385c5faa212bee4.png

再依次将元素取出:

b33fb229446988d251dc48e88c97d475.png

第三轮排序:根据百位上的数进行排序

7f86b2af2b861aeffb6b56de01f5bacc.png

最后将所有元素取出:

349502dc041064ffe99b30df004dc3f4.png

代码实现:

public class ArraySort7 {

public static void main(String[] args) {

//基数排序:通过分配再收集的方式进行排序

int[] arr={2,0,1,5,21,31,224,355,22,41,67,23,444,789,12,55,34,75};

//确定排序轮次

//获取数组中的最大值

int max=getMax(arr);

//基数排序

sortArray(arr);

//输出排序后的数组

System.out.println(Arrays.toString(arr));

}

private static void sortArray(int[] arr) {

//定义二维数组,放10个桶

int[][] tempArr=new int[10][arr.length];

//定义统计数组

int[] counts=new int[10];

int max=getMax(arr);

int len=String.valueOf(max).length();

//循环轮次

for (int i = 0,n=1; i < len; i++,n*=10) {

for (int j = 0; j < arr.length; j++) {

//获取每个位上的数字

int ys=arr[j]/n%10;

tempArr[ys][counts[ys]++]=arr[j];

}

//取出桶中的元素

int index=0;

for (int k = 0; k < counts.length; k++) {

if (counts[k]!=0){

for (int h = 0; h < counts[k]; h++) {

//从桶中取出元素放回原数组

arr[index]=tempArr[k][h];

index++;

}

counts[k]=0;//清除上一次统计的个数

}

}

}

}

private static int getMax(int[] arr) {

int max=arr[0];

for (int i = 0; i < arr.length; i++) {

if (arr[i]>max){

max=arr[i];

}

}

return max;

}

}

基数排序就介绍到这里~~~

堆排序

堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序

将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。

将其与末尾元素进行交换,此时末尾就为最大值

然后将剩余n-1个元素重新构造成一个堆,这样就会得到n个元素的次小值

如此反复的执行,便能得到一个有序序列了

8f1a74dc2b337ad28ec39e4589799b72.png

代码实现:

public class ArraySort8 {

public static void main(String[] args) {

//定义一个数组

int[] arr={1,0,6,7,2,3,4,5,8,9,10,52,12,33};

//调整成大顶堆的方法

//定义开始调整的位置

int startIndex=(arr.length-1)/2;

//循环开始调

for (int i = startIndex; i >=0 ; i--) {

toMaxHeap(arr,arr.length,i);

}

//System.out.println(Arrays.toString(arr));

//经过上面的操作后,已经把数组变成一个大顶堆,把根元素和最后一个元素进行调换

for (int i = arr.length-1; i >0; i--) {

//进行调换

int temp=arr[0];

arr[0]=arr[i];

arr[i]=temp;

//换完之后,我们再把剩余元素调成大顶堆

toMaxHeap(arr,i,0);

}

System.out.println(Arrays.toString(arr));

}

/**

*

* @param arr 要排序的数组

* @param size 调整的元素个数

* @param index 从哪里开始调整

*/

private static void toMaxHeap(int[] arr, int size, int index) {

//获取左右字节的索引

int leftNodeIndex=index*2+1;

int rightNodeIndex=index*2+2;

//查找最大节点所对应的索引

int maxIndex=index;

if (leftNodeIndexarr[maxIndex]){

maxIndex=leftNodeIndex;

}

if(rightNodeIndexarr[maxIndex]){

maxIndex=rightNodeIndex;

}

//我们来调换位置

if(maxIndex!=index){

int t=arr[maxIndex];

arr[maxIndex]=arr[index];

arr[index]=t;

//调换完之后,可能会影响到下面的子树,不是大顶堆,我们还需要再次调换

toMaxHeap(arr,size,maxIndex);

}

}

}

堆排序就介绍到这里~~~

最后

感谢你看到这里,文章有什么不足还请指正,觉得文章对你有帮助的话记得给我点个赞,每天都会分享java相关技术文章或行业资讯,欢迎大家关注和转发文章!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php是走什么协议,TCP是什么协议

TCP代表传输控制协议&#xff0c;是Internet协议套件中的基本协议&#xff0c;是一种网络通信协议&#xff1b;它规定如何建立和维护两个程序可以交换数据的连接&#xff0c;通过Internet发送信息的方式。TCP代表传输控制协议&#xff0c;是Internet协议套件中的基本协议&#…

php yii 命令行,命令行模式(Command)

命令行模式(Command)3.2.1. 目的为了封装调用和解耦。我们有一个调用程序和一个接收器。 这种模式使用「命令行」将方法调用委托给接收器并且呈现相同的「执行」方法。 因此&#xff0c;调用程序只知道调用「执行」去处理客户端的命令。接收器会从调用程序中分离出来。这个模式…

php 获取 js json数据类型,JS基础-JS的数据类型和访问/流程控制/JSON格式字符串和js对象相互转换...

JS的数据类型和访问/流程控制/JSON格式字符串和js对象相互转换1. JS的数据类型和访问1.1. 原始类型JS中的原始数据类型有: number , string , boolean ;声明变量使用 var 关键字./* 数字类型 */varyear2020;/* 字符串类型 */varnamezhangsan;/* 布尔类型 */varisUpdatefalse;获…

python 数据挖掘论文,Orange:一个基于 Python 的数据挖掘和机器学习平台

Orange 简介Orange 是一个开源的数据挖掘和机器学习软件。Orange 基于 Python 和 C/C 开发&#xff0c;提供了一系列的数据探索、可视化、预处理以及建模组件。Orange 拥有漂亮直观的交互式用户界面&#xff0c;非常适合新手进行探索性数据分析和可视化展示&#xff1b;同时高级…

php量表是什么心理量表,心理学中的“5大心理学测评量表”你知道多少?

原标题&#xff1a;心理学中的“5大心理学测评量表”你知道多少&#xff1f;心理学知识中涵盖了类型丰富的心理学测评量表&#xff0c;你知道其中的多少呢&#xff1f;1、《应对方式问卷》《应对方式问卷》由肖计划等人参照国内外应对研究的问卷内容以及有关应对理论&#xff0…

php对象魔术方法,php学习之类与对象的魔术方法的使用

原标题&#xff1a;php学习之类与对象的魔术方法的使用魔术方法有哪些__construct&#xff1a;构造方法__destuct&#xff1a;析构方法__call&#xff1a;在对象中调用一个不可访问的方法时。__call()会被调用__callStatic&#xff1a;__get&#xff1a;调用不可访问的属性__se…

linux查看发起ddos攻击的ip,在Linux上使用netstat命令查证DDOS攻击的方法

导读DOS攻击或者DDOS攻击是试图让机器或者网络资源不可用的攻击。这种攻击的攻击目标网站或者服务通常是托管在高防服务器比如银行&#xff0c;信用卡支付网管&#xff0c;甚至根域名服务器。服务器出现缓慢的状况可能由很多事情导致&#xff0c;比如错误的配置&#xff0c;脚本…

linux应用程序逆向,Linux下查看并下载命令源码包(根据命令/应用程序逆向获取并且安装其所属源码包)...

使用linux的过程中&#xff0c;我们会熟悉各种命令&#xff0c;偶尔我们不禁会问&#xff0c;这些命令是怎么实现的&#xff0c;学习他们其实是学习linux高级系统编程很快捷的方法。这些命令的源码肯定是存放在相应的包里面&#xff0c;但是是哪些包呢&#xff1f;发行版的包管…

linux windows变色龙,体验开源变色龙SUSE Linux Enterprise Server 11

体验开源变色龙SUSE Linux Enterprise Server 11SUSE Linux Enterprise Server 11主要针对的是企业用户&#xff0c;SUSE产品分为SUSE Linux Enterprise Desktop(SLED)和SUSE Linux Enterprise Server(SLES)两个版本。笔者测试的版本为Server版本&#xff0c;主要面向SMB甚至是…

c语言数组下标越界检查程序,数组下标越界

已结贴√问题点数&#xff1a;20 回复次数&#xff1a;11数组下标越界题目是一个有10个元素的数组&#xff0c;存有10个考生的分数&#xff0c;写5个函数&#xff0c;分别计算总分&#xff0c;最高分&#xff0c;最低分&#xff0c;平均分&#xff0c;分数升序排列。我写了5函数…

weex android 性能,跨越适配性能那道坎,企鹅电竞Android weex优化

作者&#xff1a;龙泉&#xff0c;腾讯企鹅电竞工程师商业转载请联系腾讯WeTest获得授权&#xff0c;非商业转载请注明出处。WeTest 导读企鹅电竞从17年6月接入weex&#xff0c;到现在已经有一年半的时间&#xff0c;这段时间里面&#xff0c;针对遇到的问题&#xff0c;企鹅电…

华为5g鸿蒙折叠,华为5G折叠概念新机:内折叠+麒麟9000+鸿蒙OS 这才是华为的实力...

从手机二十多年的发展历史来看&#xff0c;现在很多形态各异的智能手机&#xff0c;其设计思路与功能机时代一样&#xff0c;比如三星Fold的折叠手机&#xff0c;就和功能机时代的翻盖手机类似&#xff0c;又或者OPPO的X 2021卷轴屏概念机&#xff0c;则和功能机时代的滑屏设计…

iis7.5配置 html,windows server 2008R2系统 IIS7.5配置伪静态的方法(urlrewrite)

这篇文章主要介绍了windows server 2008R2系统 IIS7.5配置伪静态页面 ,需要的朋友可以参考下从网上找了一下&#xff0c;原来微软IIS官方网站给IIS7及以后续版本提供了个URL重写组件。下载地址&#xff1a;http://www.iis.net/download/URLRewrite或者//www.iis7.com/softs/479…

cad多线段长度计算总和_没想到啊,我平时用的CAD多段线有这么多学问

很多人都说&#xff0c;CAD用多段线来代替直线绘图会比较方便&#xff0c;因为多段线除了常规直线功能之外&#xff0c;也能画弧线&#xff0c;更重要的是&#xff0c;一次命令执行的线条为一个整体&#xff0c;操作方便。难道多段线PL仅仅只有这明面上的实力吗&#xff1f;当然…

毕业与计算机专业,电子与计算机工程专业毕业后干什么

学分网给各位考生筛选整理了&#xff1a;电子与计算机工程专业毕业后能做什么&#xff0c;电子与计算机工程专业的就业去向&#xff0c;电子与计算机工程专业毕业后干什么&#xff0c;电子与计算机工程专业主要学习哪些课程&#xff0c;希望对大家有所帮助&#xff0c;更多的资…

网站备案靠谱吗_网站外包靠谱吗目前都是什么价位

网站外包靠谱吗先要防坑再说行情。说下网站外包那些容易入的坑&#xff0c;如果避开这些坑才能更好的做网站。经常遇到的问题如下假案例&#xff0c;吹牛逼&#xff1a;拿着别人的案例来忽悠&#xff0c;压根不是自己做的&#xff01;消极怠工&#xff0c;拖延工期&#xff1a;…

浪潮n系列服务器指示灯_【科恩电气】通用薄型区域传感器 NA2N系列

强烈推荐NA2-N系列通用薄型区域传感器&#xff0c;用作保障人身安全的检测装置时&#xff0c;请务必使用光幕传感器。垂询电话&#xff1a;400-867-5758NA2-N8/NA2-N12/NA2-N16/NA2-N20/NA2-N24/NA2-N28全系列现货供应产品详细参数如下&#xff1a;最大检测高度540mm(28光轴)实…

品质主管每日工作需要做哪些_做微信社群运营需要用到哪些工具来铺助工作呢?...

对社群工作进行运营并不是人们想象的那般不需要风吹日晒&#xff0c;只需要待在房间里就能够轻松工作了。虽然这些工作人员不需要每天风吹日晒的&#xff0c;但是工作起来一点都不轻松&#xff0c;而且还非常的繁琐。其实对微信社群运营是需要采取一些辅助工具来帮忙的&#xf…

蚂蚁森林快捷指令_iPhone「快捷指令」怎么玩?玩法太多,别让这个功能吃灰

自iOS 12.1.4 系统更新之后&#xff0c;苹果就增加了「快捷指令」这一功能。熟练使用这个功能的小伙伴&#xff0c;可以让平时的生活工作效率大大提升&#xff0c;将一系列复杂的流程变得简单化&#xff1b;对于不熟悉这个功能的小伙伴而言&#xff0c;它只藏在手机角落的一个小…

分享按钮 html代码,超简洁微博分享按钮代码

摘要由于本站实现了全站https&#xff0c;百度分享的js就失效了&#xff0c;虽然用的不多但总还是少了点什么。本来打算把百度分享的所有资源下载到我的服务器上调用&#xff0c;但转念一想我就用一个微博分享和百度分享啊&#xff0c;干嘛如此麻烦&#xff01;由于本站实现了全…