iOS 排序演算法總結 二分法查詢

2022-08-29 02:03:15 字數 3851 閱讀 7987

還有乙個:二分插入排序  平均時間o(n2)   穩定

1、插入排序

在要排序的一組數中,假設前面(n-1) [n>=2] 個數已經是排好順序的,現在要把第n個數插到前面的有序數中,使得這n個數也是排好順序的。如此反覆迴圈,直到全部排好順序。

直接插入排序是穩定的。演算法時間複雜度o(n2)--[n的平方]

main()

int  a[10],j,i,m;

for(j=1;j<10;j++)

m=a[j];

for(i=j-1;i>=0;i--)

if(a[i]break;

else

a[i+1]=a[i];

a[i+1]=m;

加注釋的版本:

void lnsertsort(seqlist r)

//merge

8.二分法查詢和二分法插入

首先申明,二分法查詢只適用與已排序的數列,如果是混亂數列。。我也無能為力~

有乙個陣列 v 已經按公升序排列了,陣列 v 有 n=20 個元素。陣列中有個元素 x,如何知道 x 位於該陣列的第幾位呢?

解決這個問題的乙個普遍方法是二分法查詢。下面是程式:

int binsearch(int x, int v, int n)
return -1; //沒有查詢出來返回-1
}
思路很簡單:首先將輸入值 x 與陣列 v 的中間元素比較,如果 x 小於中間的元素,則將 high 值設為 中間元素-1,同理,若 x 大於中間元素,則將中間元素 + 1作為 low,再在low 與 high之間進行查詢

二分法插入排序 

演算法思想簡單描述:

在插入第i個元素時,對前面的0~i-1元素進行折半,先跟他們

中間的那個元素比,如果小,則對前半再進行折半,否則對後半

進行折半,直到left>right,然後再把第i個元素前1位與目標位置之間

的所有元素後移,再把第i個元素放在目標位置上。

二分法沒有排序,只有查詢。所以當找到要插入的位置時。移動必須從最後乙個記錄開始,向後移動一位,再移動倒數第2位,直到要插入的位置的記錄移後一位。

二分插入排序是穩定的,平均時間o(n2)

void binsort(ref int data1)

1、二分法查詢插入位置

如果r[i]4、演算法

int left,right,num;

int middle,j;

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

// 準備

left = 0;

right = i-1;

num = data1[i];

// 二分法查詢插入位置

while( right >= left)

// 指向已排序好的中間位置

middle = ( left + right ) / 2;

if( num < data1[middle] )

// 插入的元素在右區間

right = middle-1; 

else

// 插入的元素在左區間

left = middle+1;    

// 後移排序碼大於r[i]的記錄

for( j = i-1;j >= left;j-- )

data1[j+1] = data1[j];

// 插入

data1[left] = num;

// 插入的元素在左區間

left = middle+1;    

// 後移排序碼大於r[i]的記錄

for( j = i-1;j >= left;j-- )

data1[j+1] = data1[j];

// 插入

data1[left] = num;

還有乙個:二分插入排序  平均時間o(n2)   穩定

1、插入排序

在要排序的一組數中,假設前面(n-1) [n>=2] 個數已經是排好順序的,現在要把第n個數插到前面的有序數中,使得這n個數也是排好順序的。如此反覆迴圈,直到全部排好順序。

直接插入排序是穩定的。演算法時間複雜度o(n2)--[n的平方]

main()

int  a[10],j,i,m;

for(j=1;j<10;j++)

m=a[j];

for(i=j-1;i>=0;i--)

if(a[i]break;

else

a[i+1]=a[i];

a[i+1]=m;

加注釋的版本:

void lnsertsort(seqlist r)

//merge

8.二分法查詢和二分法插入

首先申明,二分法查詢只適用與已排序的數列,如果是混亂數列。。我也無能為力~

有乙個陣列 v 已經按公升序排列了,陣列 v 有 n=20 個元素。陣列中有個元素 x,如何知道 x 位於該陣列的第幾位呢?

解決這個問題的乙個普遍方法是二分法查詢。下面是程式:

int binsearch(int x, int v, int n)
return -1; //沒有查詢出來返回-1
}
思路很簡單:首先將輸入值 x 與陣列 v 的中間元素比較,如果 x 小於中間的元素,則將 high 值設為 中間元素-1,同理,若 x 大於中間元素,則將中間元素 + 1作為 low,再在low 與 high之間進行查詢

二分法插入排序 

演算法思想簡單描述:

在插入第i個元素時,對前面的0~i-1元素進行折半,先跟他們

中間的那個元素比,如果小,則對前半再進行折半,否則對後半

進行折半,直到left>right,然後再把第i個元素前1位與目標位置之間

的所有元素後移,再把第i個元素放在目標位置上。

二分法沒有排序,只有查詢。所以當找到要插入的位置時。移動必須從最後乙個記錄開始,向後移動一位,再移動倒數第2位,直到要插入的位置的記錄移後一位。

二分插入排序是穩定的,平均時間o(n2)

void binsort(ref int data1)

1、二分法查詢插入位置

如果r[i]4、演算法

int left,right,num;

int middle,j;

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

// 準備

left = 0;

right = i-1;

num = data1[i];

// 二分法查詢插入位置

while( right >= left)

// 指向已排序好的中間位置

middle = ( left + right ) / 2;

if( num < data1[middle] )

// 插入的元素在右區間

right = middle-1; 

else

// 插入的元素在左區間

left = middle+1;    

// 後移排序碼大於r[i]的記錄

for( j = i-1;j >= left;j-- )

data1[j+1] = data1[j];

// 插入

data1[left] = num;

// 插入的元素在左區間

left = middle+1;    

// 後移排序碼大於r[i]的記錄

for( j = i-1;j >= left;j-- )

data1[j+1] = data1[j];

// 插入

data1[left] = num;

iOS 排序演算法總結 二分法查詢

本文均是自己終結,查考 還有乙個 二分插入排序 平均時間o n2 穩定 1 插入排序 在要排序的一組數中,假設前面 n 1 n 2 個數已經是排好順序的,現在要把第n個數插到前面的有序數中,使得這n個數也是排好順序的。如此反覆迴圈,直到全部排好順序。直接插入排序是穩定的。演算法時間複雜度o n2 n...

查詢演算法 二分法

二分查詢演算法的基本思想 一.首先確定該區間的中間元素位置 mid low high 2 mid代表區間內中間元素的位置 low代表區間內最左邊元素的位置 high代表區間內最右邊元素的位置 二.將待查key元素值與中間元素mid的值 array mid 比較,如果相等,則查詢成功,否則確定新的查詢...

演算法 二分法查詢

1 2 二分法實驗 31 設a 0 n 1 是乙個已排好序的陣列.4請改寫二分搜尋演算法,使得當搜尋元素x不在陣列中時,5返回小於x的最大元素的位置i和大於x的最大元素位置j.6當搜尋元素在陣列中時,i和j相同,均為x在陣列中的位置.72 設有n個不同的整數排好序後存放於t 0 n 1 中,8若存在...