/*演算法思想:在參加排序的序列中任意選擇乙個元素(通常稱為分界元素或基準元素),把小於或等於
分界元素的所有元素都移到分界元素的前面,把大於分界元素的所有元素都移到分界元素的後面,
這樣,當前參加排序的序列就被劃分成前後兩個子串行,其中前乙個子串行中的所有元素都小於後
乙個子串行的所有元素,並且分界元素正好處於排序的最終位置上。然後分別對這兩個子串行遞迴
地進行上述排序過程,直到所有元素都處於排序的最終位置上,排序結束。
*/#include
#include
#include
#include
#include
using
namespace
std;
//輸出結果
void printdata(vectora);
//將 pivot左邊的數都小於他,右邊的數都大於他
int partition(vector& a, int low, int
high)
//此時, pivot左邊的資料都小於他,右邊的資料都大於他
a[low] =pivot;
//返回樞紐值位置
return
low;
}void qsort(vector& a, int low, int
high) }
//啟動程式
void quicksort(vector& a, int
size)
void printdata(vectora)
cout
<}int
main()
; unsigned n =a.size();
//插入排序
quicksort(a, n);
return0;
}
#include #include#include
#include
#include
using
namespace
std;
void printdata(vectora)
cout
<調整為大頂堆
void heapadjust(vector& a, int low, int
high)
if (tmp < a[child])
else
} a[low] = tmp; //
將父親結點 插入 到比他大的 孩子結點位置.}//
沒有使用傳引用,不改變 a
void heapsort(vector& a, int
n)
for (int j = n - 1; j > 0; j--)
printdata(a);}
intmain()
; unsigned n =a.size();
//插入排序
heapsort(a, n);
return0;
}
不懂可以看這個:
#include #includeusing
namespace
std;
int test[100] = ;
void merge(int *test, int lo, int mid, int
hi);
void mergesort(int *test, int lo, int
hi)
//歸併---o(nlogn), t(n) = 2t(n/2) + o(n)
void merge(int *test, int lo, int mid, int
hi)
deleteb;}
intmain()
;
mergesort(test,
0, 13
);
for (int i = 0; i < 13; i++)
cout
<< test[i] << "";
cout
}
#include #include#include
#include
using
namespace
std;
void printdata(vectora)
cout
<沒有使用傳引用,不改變 a
void insertsort(vector a, int
n) a[j + 1] =temp; }}
printdata(a);}//
折半插入排序, 只是使用折半查詢的方法來尋找插入位置
void bininsertsort(vector a, int
n)
else
}for (int j = i; j > low; j--)
a[low] =tmp;
}printdata(a);}
intmain()
; unsigned n =a.size();
//插入排序
insertsort(a, n);
//折半插入排序
bininsertsort(a, n);
return0;
}
#include #include#include
#include
#include
using
namespace
std;
void printdata(vectora)
cout
<沒有使用傳引用,不改變 a
void choosesort(vector a, int
size)
} //如果假設的最小的下標改變了,就將最小下標位置元素
//與 i 位置交換,則 i 為當前位置最小的元素
if (i !=min)
}printdata(a);}
intmain()
; unsigned n =a.size();
//插入排序
choosesort(a, n);
return0;
}
#include #include#include
#include
#include
using
namespace
std;
void printdata(vectora)
cout
<沒有使用傳引用,不改變 a
void bubblesort(vector a, int
n) }
//一次交換都沒有,說明已經沒有逆序對,則已經有序,直接退出迴圈!
if(ordered)
}printdata(a);}
intmain()
; unsigned n =a.size();
//插入排序
bubblesort(a, n);
return0;
}
演算法 一些線性排序演算法
一 計數排序 使用這個演算法有乙個前提,待排序的陣列a,其所有的元素分布在區間 0,k 該演算法的時間複雜度為o n k 當k o n 時,執行時間為o n 所以當k比較小的時候適合採用這個演算法 下面給出這個演算法實現的 include using namespace std void count...
一些重要的排序演算法
void pigeonholesort byte array,intlength int i,k,j 0 for i 0 i length i b array i for i 0 i 256 i for k 0 k b i k array j i 多一次遍歷的計數排序,排序位元組串的話速度約是鴿巢排...
一些常用的排序演算法
排序演算法 插入排序 直接插入排序 折半排序 希爾排序 交換排序 氣泡排序 快速排序 選擇排序 簡單選擇排序 堆排序 歸併排序 分配排序 箱排序 基數排序 author kevin public class sorting else break 折半排序,降序 在乙個有序的子檔案中,用折半查詢方法查...