排序大彙總

2021-07-02 02:26:31 字數 2214 閱讀 5615

1.歸併排序

void merge(int *result, int begin, int mid, int end, int *temp)

while (i <= mid)

temp[k++] = result[i++];

while (j <= end)

temp[k++] = result[j++];

for (int t = begin; t <= end; t++)

result[t] = temp[t];

}void mergesort(int *result, int begin, int end, int *temp)

}

2.快速排序

int partition(int *result, int begin, int end)

result[low] = temp;

return low;

}void quicksort(int *result, int begin, int end)

}

3.插入排序

void insertsort(int *a, int length)

a[j + 1] = temp;

}}

4.氣泡排序

void bubblesort(int *a, int length)

} }}

5.希爾排序

void shellsort(int *a, int length)

a[k + i] = temp;

} }}

6.堆排序

void heapadjust(int *a, int k, int n)

if (rhca[index])

if (index == k)

else }}

void heapsort(int *a, int n)

for (int i = n - 1; i >= 1; i--)

}

7.測試程式

int main(void)

; clock_t start, end;

int *a = new int[size];

int *b = new int[size];

int *c = new int[size];

int *temp = new int[size];

for (int i = 0; i < size; i++)

//cout << endl;

start = clock();

//mergesort(c, 0, size - 1,temp);

//priority_queueque(c, c + size);

heapsort(c, size);

//bubblesort(c, size);

//sort(c, c + size);

//stable_sort(c, c + size);

//qsort(a, size, sizeof(int), cmp);

end = clock();

cout << "heapsort:" << end - start << " ms" << endl;

start = clock();

//mergesort(a, 0, size - 1, temp);

//insertsort(a, size);

//bubblesort(a, size);

shellsort(a, size);

end = clock();

cout << "shellsort:" << end - start << " ms" << endl;

start = clock();

quicksort(b, 0, size - 1);

end = clock();

cout << "quicksort:" << end - start << " ms" << endl;

return 0;

}

總體來說,快速排序高效很多,注意,不要使用swap函式,特別是堆排序,可能是函式呼叫太多導致效率太低。

C 排序大彙總

using system namespace bubblesorter j public class mainclass bubblesorter sh new bubblesorter sh.sort iarrary for int m 0 m iarrary.length m console.w...

九大內部排序彙總

插入排序 名稱 穩定性時間複雜度 空間複雜度 直接插入排序 穩定o n2 o 1 折半插入排序 穩定o n2 o 1 希爾排序 不穩定o n2 特定n n1.3 o 1 交換排序 名稱 穩定性時間複雜度 空間複雜度 氣泡排序 穩定o n2 o 1 快速排序 不穩定o n2 o n 平均o nlog2...

排序方法彙總

氣泡排序是非常容易理解和實現,以從小到大排序舉例 設陣列長度為n。1 比較相鄰的前後二個資料,如果前面資料大於後面的資料,就將二個資料交換。2 這樣對陣列的第0個資料到n 1個資料進行一次遍歷後,最大的乙個資料就 沉 到陣列第n 1個位置。3 n n 1,如果n不為0就重複前面二步,否則排序完成。按...