WebView互動架構專案實戰(三):多程序WebView使用實踐
阿新 • • 發佈:2021-02-03
技術標籤:演算法
排序演算法
氣泡排序
排序是將一組資料升序或者降序排列;這裡排序會用到比較,比較可以從前向後,也可以從後向前,平均時間複雜度 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;
}