1. 程式人生 > 其它 >WebView互動架構專案實戰(三):多程序WebView使用實踐

WebView互動架構專案實戰(三):多程序WebView使用實踐

技術標籤:演算法

排序演算法

氣泡排序

排序是將一組資料升序或者降序排列;這裡排序會用到比較,比較可以從前向後,也可以從後向前,平均時間複雜度 O ( n 2 ) O(n^2) O(n2),最差時間複雜度 O ( n 2 ) O(n^2) O(n2)

1、原理和圖示

比較相鄰的兩個位置上的資料,升序則大的交換至右邊,相等則不交換,氣泡排序是穩定的排序演算法;下面從左至右比較實現降序為例,假設共n個數據項:
1)比較第1個和第2個位置資料,較小的放左邊,然後比較第2個和第3個位置資料,較小的放左邊,直到比較倒數第n-1個和倒數第n個位置資料,較小放左邊;
	實現將最小的一個數放在了最右邊位置。
2)重複步驟1),但是最小的位置已經放在最後,因此只需比較至倒數第n-2和倒數第n-1位置即可;
3)沒重複一次步驟1),後面的位置減少1,共進行n-1輪次即可,第1輪次比較n-1次比較,第2輪次進行n-2次比較,最後一輪次比較1次即可;
4)整個過程就像將當前最小數依次冒泡至當前最左邊;
下面是舉例:

在這裡插入圖片描述

2、C實現,redhat7.5

#include <stdio.h>
#include <stdlib.h>
void BubbleSort(int data[],int size)
{
	if(!data||size<2)
	{
		return;
	}
	for(int i=0;i<size-1;i++)
	{
		for(int j=0;j<size-i-1;j++)
		{
			if(data[j]<data[j+1])
			{
				int t = data[j+1];
				data[j+1] = data[j];
				data[
j] = t; } } } } int main(int argc, char* argv[]){ int dat[8] = {7,1,2,3,4,8,6,2}; printf("sizeof(dat)=%d\n",sizeof(dat)); int size = 8; int i = 0; for(i=0;i<size;i++) { printf("%d ",dat[i]); } printf("\n"); BubbleSort(dat,size); for(i=0;i<size;i++
) { printf("%d ",dat[i]); } printf("\n"); return 0; }

快速排序

快速排序是將氣泡排序和分治思想結合的方法。

1、原理和圖示

1)單次操作:給定一組資料,選取其中一個為基準值,有兩個指標分別從兩端向中間遍歷,與基準值比較,直到兩個指標相遇,將基準值填在相遇位置即可。
2)圖示,紅色為基準,藍色為交換值
在這裡插入圖片描述

2、C實現,redhat7.5

#include <stdio.h>
#include <stdlib.h>
void QuickSort(int data[],int left,int right)
{
	if(left>right||!data)
	{
		return;
	}
	int base = data[left];
	int i=left;
	int j=right;
	while(i<j)
	{
		while(i<j&&base > data[j])
			j--;
		data[i]=data[j];
		while(i<j&&base <= data[i])
			i++;
		data[j]=data[i];
	}
	data[i] = base;
	QuickSort(data,left,i-1);
	QuickSort(data,i+1,right);
}
int main(int argc, char* argv[]){
    int dat[8] = {7,1,2,3,4,8,6,2};
	printf("sizeof(dat)=%d\n",sizeof(dat));
	int size = 8;
	int i = 0;
	for(i=0;i<size;i++)
	{
		printf("%d ",dat[i]);
	}
	printf("\n");
	QuickSort(dat,0,size-1);
	for(i=0;i<size;i++)
	{
		printf("%d ",dat[i]);
	}
	printf("\n");
    return 0;
}

插入排序

選擇排序