還有乙個:二分插入排序 平均時間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若存在...