主頁 >  其他 > 資料結構-排序(1)

資料結構-排序(1)

2021-05-04 17:18:24 其他

5種排序

  • 1冒泡排序
    • 偽代碼
    • 原理
    • 代碼實作
  • 2插入排序
    • 偽代碼
    • 原理
    • 代碼實作
  • 3時間復雜度下屆
  • 4希爾排序
    • 偽代碼
    • 代碼實作
    • Hibbard序列
  • 5選擇排序
    • 選擇排序原理
    • 偽代碼
    • 代碼實作
  • 6堆排序
    • 堆排序基礎程式(堆的建立,插入,洗掉)
    • 堆排序演算法1(核心程式)
    • 堆排序演算法1代碼實體
  • 7有序子列的歸并
    • 歸并演算法代碼實作

1冒泡排序

1.待排序資料在陣列和鏈表均可
2.當嚴格不等的時候,才交換,就是說當等于的時候,不交換這說明演算法是穩定的

偽代碼

void Bubble_Sort(ElementType A[], int N)
{
	for (p = N - 1; p > 0; p--)
	{
		flag = 0;
		for (i = 0; i < p; i++)
		{
			if (A[i] > A[i-1])
			{
				swap(A[i] , A[i-1]);
				flag = 1;
			}
		}
		if (flag == 0)
			break;
	}
}

原理

第一個數與第二個數比較,如果第一個大,那么互換位置,然后第二個第三個比較,以此類推,第一輪過后,最大值放在了最后

代碼實作

#include<stdio.h>
int main()
{
	int i,*pointer;
	void swap(int *m, int *n);
	void pailie(int A[], int N);
	int arr[8] = { 2,1,6,7,8,9,1,1 };
	pailie(arr,8);
	for (i = 0; i < 8; i++)
	{
		printf("%d", arr[i]);
	}
	return 0;
}
void pailie(int *p_1, int N)
{
	int flag;
	int i,p;
	void swap(int m, int n);
	for (p = N - 1; p > 0; p--)
	{
		flag = 0;
		for (i = 0; i < p; i++)
		{
			if (*(p_1+i) > *(p_1+i+1))
			{
				swap(p_1 + i, p_1 + i + 1);
				flag = 1;
			}
		}
		if (flag == 0)
			break;
	}
}
void swap(int *m, int *n)
{
	int temp;
	temp = *m;
	*m = *n;
	*n = temp;
}
11126789

復雜度O(n),O(n平方)

2插入排序

偽代碼

void Insertion_Sort(ElementType A[], int N)
{
	for (p = 1; p < N; p++)
	{
		tmp =A[p];
		for (i = p; i > 0 && A[i-1] > tmp; i--)
		A[i]=A[i-1];	
	A[i] = tmp;
	}
}

原理

比如我現在在打牌,每次拿到一張牌,就要把牌從小到大排列;我現在有3張牌,分別是2,6,4;已經把這三張按照順序排好了,然后我又拿了一張5,從右開始比較發現6大于5,就把6放在第四張,然后與第二張4比較,5大于4,所以新牌5就落位,

代碼實作

#include<stdio.h>
int main()
{
	void paicu_2(int* pointer, int N);
	int i;
	int arr[8] = { 1,9,5,4,5,6,7,9 };
	paicu_2(arr, 8);
	for (i = 0; i < 8; i++)
	{
		printf("%d", arr[i]);
	}
	return 0;
}

void paicu_2(int *pointer, int N)
{
	int tmp,p,i;
	for (p = 1; p < N; p++)
	{
		tmp = *(pointer+p);
		for (i = p; i > 0 && *(pointer + i-1) > tmp; i--)
			*(pointer + i) = *(pointer + i-1);
		*(pointer + i ) = tmp;
	}
}
14556799

復雜度拿到的牌剛好順序的時候O(n),逆序的時候O(n的平方)
插入排序演算法也穩定,因為只有絕對不等的時候才換位置,

3時間復雜度下屆

  • 逆序對
    與線性代數的概念差不多,這里是說如果i>j,A[i]<A[j],這就說(i,j)是一個逆序對,
    因為每組資料的逆序對總數不變,那么只要是以每次消去一個逆序對進行排序的演算法的次數都是相同的,
    冒泡排序和插入排序每次交換一個逆序對
  • 插入排序復雜度
    O(N+I),N為初始元素個數,I為逆序對個數;
  • 任意N個不同元素的逆序對平均具有N(N-1)/4個逆序對,任何僅以交換逆序對兩元素來排序的演算法,平均復雜度為 Ω \Omega Ω(N平方), Ω \Omega Ω表示下屆O表示上界 Θ \Theta Θ表示下屆和上界

4希爾排序

上邊的冒泡排序和插入排序每次只交換一個逆序對,所以效率較低,為了提高效率,可以跟換交換的方法

  • 定義增量序列,比如說5,3,1;對每個數字進行間隔排序,意思就是首先5-間隔排序,然后3-間隔排序,最后1-間隔排序,
    例子如下
    在這里插入圖片描述

偽代碼

void Shell_sort(int A[], int N)
	{
		for (D = N / 2; D > 0; D = D / 2 )
		{
			for (p = D; p < N; p++)
			{
				tmp =A[p];
				for (i = p; i > 0 && A[i-D] > tmp; i -= D)
				{
					A[i]=A[i-D];
				}
				A[i]= tmp;
			}
		}
	}

代碼實作

#include<stdio.h>
int count=0;
int main()
{
	void paixu_3(int* point, int N);
	int i;
	int arr[8] = { 1,9,6,4,5,6,7,9};
	paixu_3(arr, 8);
	for (i = 0; i < 8; i++)
	{
		printf("%d", arr[i]);
	}
	printf("\n%d",count);
	return 0;
}

void paixu_3(int* point, int N)
{
	int p, D, tmp, i;
	for (D = N / 2; D > 0; D=D/2)
	{
		for (p = D; p < N; p++)
		{
			tmp = *(point + p);
			for (i = p; i > 0 && *(point + i - D) > tmp; i -= D)
			{
				*(point + i) = *(point + i - D);
				count++;
			}

			*(point + i) = tmp;
		}
	}
}
14566799
4

Hibbard序列

對于上邊最基礎的增量系列,可能出現復雜度為 Θ \Theta Θ(n平方)表示下屆和上界,因為增量元素不互質,比如說為8,4,2,1;如果這樣的話可能會出現小增量根本不起作用
在這里插入圖片描述
為了克服這個問題,提出了 Hibbard序列
在這里插入圖片描述

5選擇排序

選擇排序原理

  • 在陣列無序部分找到最小元素,然后把他放到有序部分的最后位置

偽代碼

void Selection_Sort(ElementType A[],int N)
{
	for(i=0;i<N;i++{
		MinPosition=ScanFormin(A,i,N-1);
		Swap(A[i],A[Minposition]);
	}
}

代碼實作

#include<stdio.h>
int main()
{
	void Selection_Sort(int* p1, int N);
	int A[20] = { 5,8,7,9,4,5,6,3,15,15,66,48,41,15,16,11,5,1,9,20 };
	Selection_Sort(A, 20);
	for(int i=0;i<20;i++)
		printf("%3d",A[i]);
	return 0;
}
void Selection_Sort(int *p1, int N)
{
	void swap(int* m, int* n);
	int i,MinPosition;
	void ScanForMin(int* p2, int k, int end_num);
	for (i = 0; i < N; i++)
	{
		ScanForMin(p1, i, N - 1);
		swap((p1+i), (p1+N-1));
	}
		
}
void ScanForMin(int *p2, int k, int end_num)//冒泡演算法求最小值
{
	int i;
	void swap(int* m, int* n);
	for (int i = k; i <= end_num; i++)
		if (*(p2+i) < *(p2 + i + 1))
			swap((p2 + i), (p2 + i + 1));
}
void swap(int *m, int *n)
{
	int temp;
	temp = *m;
	*m = *n;
	*n = temp;
}
  1  3  4  5  5  5  6  7  8  9  9 11 15 15 15 16 20 41 48 66
  • 這個提取無序部分最小值采用的方法是冒泡排序,發現沒有,先冒泡找到無序的最小值,然后放到有序的最后,好像更加復雜了哈,下面就是尋找無需部分最小元素的好方法,最大,最大堆,最小堆

6堆排序

尋找最小元,最大元

堆排序基礎程式(堆的建立,插入,洗掉)

這里說的是抽象資料結構堆是 基于資料物件集為完全二叉樹建立的堆,
堆就是一個特殊的二叉樹,最大堆就是結點元素大于左右兒子所有元的完全二叉樹
基本思想:按陣列元素的順序以此插入樹,然后調整樹的結點完成最大最自小堆的建立,通過每次取出(洗掉)最大結點完成排序,
==復雜度是線性復雜度 ==

typedef struct HNode *Heap; /* 堆的型別定義 */
struct HNode {
    ElementType *Data; /* 存盤元素的陣列 */
    int Size;          /* 堆中當前元素個數 */
    int Capacity;      /* 堆的最大容量 */
};
typedef Heap MaxHeap; /* 最大堆 */
typedef Heap MinHeap; /* 最小堆 */

#define MAXDATA 1000  /* 該值應根據具體情況定義為大于堆中所有可能元素的值 */

MaxHeap CreateHeap( int MaxSize )
{ /* 創建容量為MaxSize的空的最大堆 */

    MaxHeap H = (MaxHeap)malloc(sizeof(struct HNode));
    H->Data = (ElementType *)malloc((MaxSize+1)*sizeof(ElementType));
    H->Size = 0;
    H->Capacity = MaxSize;
    H->Data[0] = MAXDATA; /* 定義"哨兵"為大于堆中所有可能元素的值*/

    return H;
}

bool IsFull( MaxHeap H )
{
    return (H->Size == H->Capacity);
}

bool Insert( MaxHeap H, ElementType X )
{ /* 將元素X插入最大堆H,其中H->Data[0]已經定義為哨兵 */
    int i;
 
    if ( IsFull(H) ) { 
        printf("最大堆已滿");
        return false;
    }
    i = ++H->Size; /* i指向插入后堆中的最后一個元素的位置 */
    for ( ; H->Data[i/2] < X; i/=2 )
        H->Data[i] = H->Data[i/2]; /* 上濾X */
    H->Data[i] = X; /* 將X插入 */
    return true;
}

#define ERROR -1 /* 錯誤標識應根據具體情況定義為堆中不可能出現的元素值 */

bool IsEmpty( MaxHeap H )
{
    return (H->Size == 0);
}

ElementType DeleteMax( MaxHeap H )
{ /* 從最大堆H中取出鍵值為最大的元素,并洗掉一個結點 */
    int Parent, Child;
    ElementType MaxItem, X;

    if ( IsEmpty(H) ) {
        printf("最大堆已為空");
        return ERROR;
    }

    MaxItem = H->Data[1]; /* 取出根結點存放的最大值 */
    /* 用最大堆中最后一個元素從根結點開始向上過濾下層結點 */
    X = H->Data[H->Size--]; /* 注意當前堆的規模要減小 */
    for( Parent=1; Parent*2<=H->Size; Parent=Child ) {
        Child = Parent * 2;
        if( (Child!=H->Size) && (H->Data[Child]<H->Data[Child+1]) )
            Child++;  /* Child指向左右子結點的較大者 */
        if( X >= H->Data[Child] ) break; /* 找到了合適位置 */
        else  /* 下濾X */
            H->Data[Parent] = H->Data[Child];
    }
    H->Data[Parent] = X;

    return MaxItem;
} 

/*----------- 建造最大堆 -----------*/
void PercDown( MaxHeap H, int p )
{ /* 下濾:將H中以H->Data[p]為根的子堆調整為最大堆 */
    int Parent, Child;
    ElementType X;

    X = H->Data[p]; /* 取出根結點存放的值 */
    for( Parent=p; Parent*2<=H->Size; Parent=Child ) {
        Child = Parent * 2;
        if( (Child!=H->Size) && (H->Data[Child]<H->Data[Child+1]) )
            Child++;  /* Child指向左右子結點的較大者 */
        if( X >= H->Data[Child] ) break; /* 找到了合適位置 */
        else  /* 下濾X */
            H->Data[Parent] = H->Data[Child];
    }
    H->Data[Parent] = X;
}

void BuildHeap( MaxHeap H )
{ /* 調整H->Data[]中的元素,使滿足最大堆的有序性  */
  /* 這里假設所有H->Size個元素已經存在H->Data[]中 */

    int i;

    /* 從最后一個結點的父節點開始,到根結點1 */
    for( i = H->Size/2; i>0; i-- )
        PercDown( H, i );
}

堆排序演算法1(核心程式)

void Heap_Sort (ElementType A[],int N)
{
	BuildHeap(A);//建立最小堆
	for(i=0;i<N;i++)
		TmpA[i]=DeleteMin(A);
	for(i=0;i<N;i++)
		A[i]=Temp[i];
}

堆排序演算法1代碼實體

#include<stdio.h>
#include<stdbool.h>
#define ERROR -1 /* 錯誤標識應根據具體情況定義為堆中不可能出現的元素值 */
typedef struct HNode* Heap; //指向結構體(堆)的指標
struct HNode//用陣串列示的二叉樹表示堆
{
    int* Data; /* 存盤元素的陣列 */
    int Size;          /* 堆中當前元素個數 */
    int Capacity;      /* 堆的最大容量 */
};
typedef Heap MaxHeap; /* 最大堆 */

#define MAXDATA 1000  /* 該值應根據具體情況定義為大于堆中所有可能元素的值 */

//創建容量為MAXSize的空堆
MaxHeap CreateHeap(int MaxSize)    
{ 

    MaxHeap H = (MaxHeap)malloc(sizeof(struct HNode));//H指向儲存單元的首地址
    H->Data = (int*)malloc((MaxSize) * sizeof(int));
    H->Size = 0;
    H->Capacity = MaxSize;
    H->Data[0] = MAXDATA; /* 定義"哨兵"為大于堆中所有可能元素的值*/

    return H;
}

bool IsFull(MaxHeap H)
{
    return (H->Size == H->Capacity);
}

void Insert(MaxHeap H, int X)
{ /* 將元素X插入最大堆H,其中H->Data[0]已經定義為哨兵 */
    int i;

    if (IsFull(H)) {
        printf("最大堆已滿");
    }
    i = ++H->Size; /* i指向插入后堆中的最后一個元素的位置 */
    for (; H->Data[i / 2] < X; i /= 2)
        H->Data[i] = H->Data[i / 2]; /* 上濾X */
    H->Data[i] = X; /* 將X插入 */
}



bool IsEmpty(MaxHeap H)
{
    return (H->Size == 0);
}

int DeleteMax(MaxHeap H)
{ /* 從最大堆H中取出鍵值為最大的元素,并洗掉一個結點 */
    int Parent, Child;
    int MaxItem, X;

    if (IsEmpty(H)) {
        printf("最大堆已為空");
        return ERROR;
    }
    MaxItem = H->Data[1]; /* 取出根結點存放的最大值 */
    /* 用最大堆中最后一個元素從根結點開始向上過濾下層結點 */
    X = H->Data[H->Size--]; /* 注意當前堆的規模要減小 */
    for (Parent = 1; Parent * 2 <= H->Size; Parent = Child) {
        Child = Parent * 2;
        if ((Child != H->Size) && (H->Data[Child] < H->Data[Child + 1]))
            Child++;  /* Child指向左右子結點的較大者 */
        if (X >= H->Data[Child]) break; /* 找到了合適位置 */
        else  /* 下濾X */
            H->Data[Parent] = H->Data[Child];
    }
    H->Data[Parent] = X;

    return MaxItem;
}

/*----------- 建造最大堆 -----------*/
void PercDown(MaxHeap H, int p)
{ /* 下濾:將H中以H->Data[p]為根的子堆調整為最大堆 */
    int Parent, Child;
    int X;

    X = H->Data[p]; /* 取出根結點存放的值 */
    for (Parent = p; Parent * 2 <= H->Size; Parent = Child) {
        Child = Parent * 2;
        if ((Child != H->Size) && (H->Data[Child] < H->Data[Child + 1]))
            Child++;  /* Child指向左右子結點的較大者 */
        if (X >= H->Data[Child]) break; /* 找到了合適位置 */
        else  /* 下濾X */
            H->Data[Parent] = H->Data[Child];
    }
    H->Data[Parent] = X;
}

void BuildHeap(MaxHeap H)//H是結構體指標變數
{ /* 調整H->Data[]中的元素,使滿足最大堆的有序性  */
  /* 這里假設所有H->Size個元素已經存在H->Data[]中 */

    int i;

    /* 從最后一個結點的父節點開始,到根結點1 */
    for (i = H->Size / 2; i > 0; i--)
        PercDown(H, i);
}


void paixu_heap(int *A, int N)
{
    int i;
    MaxHeap H_1;
    int TmpA[16];
    H_1 = CreateHeap(16);
    for (i =1; i < 16; i++)
    {
        Insert(H_1, *(A+i));
    }
    BuildHeap(H_1);
    for (i = 1; i < N; i++)
    	A[i] = DeleteMax(H_1);
  //    TmpA[i] = DeleteMax(H_1);
  //for (i = 0; i < N; i++)
  //    A[i] = TmpA[i];
}

int main()
{
    int arr[16] = { MAXDATA,1, 6, 8, 4, 8, 9, 1, 12, 66, 78, 12, 1, 6, 9, 5 };
    paixu_heap(arr, 16);
    for (int i = 1; i < 16; i++)
    {
        printf("%d  ", arr[i]);
    }
    return 0;
}
78  66  12  12  9  9  8  8  6  6  5  4  1  1  1

7有序子列的歸并

把兩個子數列按順序放進一個陣列,用這中思想可以加快排序的速度,
可以把一個陣列分開,然后采用這種思路進行排序,叫做歸并排序

歸并演算法代碼實作

//歸并排序
#include<stdio.h>
int main()
{
	void Merge_sort(int* p, int N);
	int a[10] = { 1,5,9,7,5,3,2,4,6,8 };
	int* point;
	point = a;
	Merge_sort(point, 10);
	for (int i = 0; i < 10; i++)
		printf("%d  ", *(point+i));
	return 0;
}

void Merge(int *p2, int *pb2, int L, int R, int RightEnd)
{
	int LeftEnd = R - 1;
	int Tmp = L;
	int NumElements = RightEnd-L + 1;
	while (L <= LeftEnd && R <= RightEnd)
	{
		if (*(p2 + L) <= *(p2 + R))
		{
			*(pb2+Tmp) = *(p2 + L);
			Tmp++;
			L++;
		}
		else
		{
			*(pb2 + Tmp) = *(p2 + R);
			Tmp++;
			R++;
		}
	}
	while (L <= LeftEnd)
	{
		*(pb2 + Tmp) = *(p2 + L);
		Tmp++;
		L++;
	}
	while (R <= RightEnd)
	{
		*(pb2 + Tmp) = *(p2 + R);
		Tmp++;
		R++;
	}

	for (int i = 0; i < NumElements; i++,RightEnd--)
	{
		*(p2 + RightEnd) = *(pb2 + RightEnd);
	}
}

void Msort(int *p0, int *pb, int L, int RightEnd)
{
	int center;
	if (L < RightEnd)
	{
		center = (L + RightEnd) / 2;
		Msort(p0, pb, L, center);
		Msort(p0, pb, center + 1, RightEnd);
		Merge(p0, pb, L, center +1, RightEnd);

	}
}

void Merge_sort(int *p, int N)
{
	int* tmpA;
	tmpA = (int*)malloc(N * sizeof(int));
	if (tmpA != NULL)
	{
		Msort(p, tmpA, 0, N - 1);
		free(tmpA);
	}
	else
		printf("空間不足");
}
1  2  3  4  5  6  7  8  9

另外桶排序和表排序在下一篇:排序2

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/282706.html

標籤:其他

上一篇:Linux多執行緒_(行程與執行緒,執行緒的生命周期認識執行緒,執行緒互斥)

下一篇:SORT和DeepSORT論文閱讀理解及代碼決議

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more