void print(int a, const int len);//輸出函式
void sort1(int a, const int len);//方法一:冒泡
void sort2(int a, const int len);//方法二:異或(只能整型)
void sort3(int a, const int len);//方法三:插入排序
void sort4(int a, const int len);//方法四:選擇排序
void sort5(int a, const int len);//方法五:希爾排序
void sort6(int a, int begin, int end);//方法六:快速排序
void sort7(int a, const int len);//方法七:堆排序
void sort8(int a, const int len);//方法八:歸併排序
int main()
return 0;
}void print(int a, const int len)
cout << "\n" << endl;
}void sort1(int a, const int len)//方法一:冒泡}}
}//氣泡排序圖的形象化,來自維基
void sort2(int a, const int len)//方法二:異或,缺點:只能整型}}
}void sort3(int a, const int len)//方法三:插入排序
a[j] = t;//儲存的值放到j;
break;//插入之後退出}}
}//插入排序圖的形象化,來自維基
void sort4(int a, const int len)//方法四:選擇排序
}int t = a[i];
a[i] = a[k];
a[k] = t;}}
void sort5(int a, const int len)//方法五:希爾排序
}int t = a[j];//交換
a[j] = a[k];
a[k] = t;}}
d /= 2;}}
void sort6(int a, int belenin, int end)//方法六:快速排序
int part(int a, int belenin, int end)//方法六的乙個呼叫排序函式
//交換a[belenin]和a[i]
int t = a[belenin];
a[belenin] = a[i];
a[i] = t;
return i;
//快速排序圖的形象化,來自維基
/*堆的結構類似於完全二叉樹,每個結點的值都小於或者等於其左右孩子結點的值,或者每個節點的值都大於或等於其左右孩子的值
堆排序過程將待排序的序列構造成乙個堆,選出堆中最大的移走,再把剩餘的元素調整成堆,找出最大的再移走,重複直至有序
來看一下實現*/
//堆排序
void sort7(int a, const int len)
//從堆中的取出最大的元素再調整堆
for (i = len - 1; i > 0; --i)
}//再看 調整成堆的函式
void heapify(int a, const int first, int end)//宣告方法七中的一部分
}//堆排序圖的形象化,來自維基
//分成兩部分
int start1 = start, end1 = mid;
int start2 = mid + 1, end2 = end;
//然後合併
merlene(a, relen, start1, end1);
merlene(a, relen, start2, end2);
int k = start;
//兩個序列一一比較,哪的序列的元素小就放進relen序列裡面,然後位置+1再與另乙個序列原來位置的元素比較
//如此反覆,可以把兩個有序的序列合併成乙個有序的序列
while (start1 <= end1 && start2 <= end2)
relen[k++] = a[start1] < a[start2] ? a[start1++] : a[start2++];
//然後這裡是分情況,如果a2序列的已經全部都放進relen序列了然後跳出了迴圈
//那就表示a序列還有更大的元素(乙個或多個)沒有放進relen序列,所以這一步就是接著放
while (start1 <= end1)
relen[k++] = a[start1++];
//這一步和上面一樣
while (start2 <= end2)
relen[k++] = a[start2++];
//把已經有序的relen序列放回a序列中
for (k = start; k <= end; k++)
a[k] = relen[k];
//歸併排序圖的形象化,來自維基
基本排序演算法總結
1.插入排序 insertion sort o n2 對少量資料排序很有效,不需要額外的儲存空間。待排序列已經是從小到大,最壞就是逆序的時候了。且是穩定的。include include int exchange int a,int i,int j int insert int a,int s,in...
基本排序演算法總結
排序演算法很多,這裡做個總結,最重要的是記住演算法思想,而不是記住程式怎麼寫。程式過一段時間就會忘了,演算法原理熟悉了現場寫出來應該是很容易的。時間複雜度為o n 2 的三種排序演算法 插入排序 選擇排序 氣泡排序。插入排序 插入排序是選定元素找位置。對於位置為p上的元素,假定0 p 1的元素已經排...
基本排序演算法總結
排序演算法的評價 評價排序演算法的一般準則是 平均情況下的排序速度 最優最劣情況下的速度 行為是否自然 是否以相等的關鍵字重排元素 陣列的排序速度直接與比較 comparison 次數和交換 exchange 次數相關,其中交換的作用更大,因為占用的時間多。如果頻繁遭遇到最優最劣情況,則最優和最劣情...