快速排序希爾排序都是什麼意思,快速排序與希爾排序哪個效率更高?

2021-04-14 09:07:20 字數 5879 閱讀 6770

1樓:匿名使用者

個人認為是快速排序。

快速排序的最差複雜度可能會降為n^2,最快則是nlogn,但

是,平均情況下是較快的。

而希爾排序的最差情況下,複雜度可能會降為n^s 到n^s之間,(1<=s<=2),平均則是nlog^2n。

理論上來看,希爾排序可能是效率比較高的。

但是,實際情況來看,快速排序的實際效果很不錯。

原因就是,快速排序在實際情況中,壞的情況是不太容易出現的(取中間值或隨機值),

壞情況概率低。

而,希爾排序在實際情況中,效率就取決於他在求解過程中的增量,合理的增量是不好找的。

因此,經常會出現不爽的情況,壞的情況概率高。

氣泡排序 快速排序 希爾排序 按平均時間複雜度角度衡量從好到差順序

2樓:匿名使用者

快速排序o(n*logn)

希爾排序的時間複雜度與增量序列的選取有關,下界是o(n*log2n)

氣泡排序o(n*n)

比較直接插入排序,簡單選擇排序,快速排序,堆排序,歸併排序,希爾排序和基數排序的時空效能穩定性和情

3樓:寶石鯊魚

堆排序 n*logn 時間在這裡比較優 不過穩定性差快排 o(nlogn),最壞情況為o(n^2)。在實際應用中,快速排序的平均時間複雜度為o(nlogn)。

比較均衡

直接插入排序,簡單選擇排序 n^2

希爾排序和基數排序 不太瞭解

空間的話 個人認為是一樣的 因為你要用同樣的陣列去存 只是存的順序不同罷了

時間的話 100w以內 快排 最優 100w以上 堆排的優越性就明顯出來了

所以一般快排就可以滿足

直接插入排序、二分法插入排序、希爾排序、直接選擇排序、堆排序、交換排序、快速排序英文怎麼說?

4樓:聽不清啊

直接插入排序:straight insertion sort二分法插入排序: binary sort

希爾排序:shell sort

直接選擇排序:straight select sort堆排序:heap sort

交換排序:swap sort

快速排序:quick sort

基數排序:radix sort

歸併排序:merge sort

5樓:匿名使用者

straightinsertion、binarysort、shellsort、******selectionsort、

quicksort

快速排序 和桶排序 的區別

6樓:育知同創教育

快速排序 和桶排序 的區別:

雖然表面上看起來兩者很像,桶排序是把資料分到若干個桶裡,再遞專歸地對每一個桶進屬行排序;上述方法一是把(除了arr[piv]以外的)資料分到前後兩個「桶」裡,再遞迴地分別進行排序。但是桶排序在把資料分桶的時候,並不是使用資料本身兩兩比較的方法,而是讀取資料某一位上的值再兩兩比較。這就使得桶排序的遞迴深度可以是常數,而不像上述快排方法一,遞迴深度和資料量 n 有關。

桶排序並不屬於比較排序,也就是說它用到了快速排序、歸併排序等這些排序方法所無法獲取的資訊。(但是你可以用比較排序的方式來實現桶排序。)如果桶排序永遠只使用兩個桶,它與快排的效率是一樣的。

但是桶排序可以使用更多(但是有限)的桶,因為我們事先已經知道資料的範圍,因而知道可以用多少個桶來裝。比如我們知道資料取值是0-99,就可以放心建立10個桶,按照十位上的數字(0到9)將資料分到每個桶裡,而不用擔心出現資料100時沒有對應的桶。但是快排假設我們不知道資料的範圍,因此只能把資料按照「比arr[piv]大還是小」分成兩個桶。

課題31:給出一組實驗來比較下列排序演算法的時間效能: 快速排序、堆排序、希爾排序、氣泡排序、歸併排 10

7樓:匿名使用者

7個以下資料,插入排序有效率。

以上資料,安排有序(順序,逆序),隨機數多組進行測試。

一般來說,快排最快,但是原始資料有序情況下會退化為n平方,需要隨機化。

利用插入排序,希爾排序,起泡排序,快速排序,選擇排序,堆排序,歸併排序排序方法排序30000個隨機整數

8樓:智慧的默默

#include"stdio.h"

#include "stdlib.h"

#include

#include

#include"time.h"

#include

using namespace std;

void insertsort(int* pdataarray, int idatanum)

pdataarray[k] = temp; //插入

} }

} //交換data1和data2所指向的整形

void dataswap(int* data1, int* data2)

*函式名稱:selectionsort

*引數說明:pdataarray 無序陣列;

* idatanum為無序資料個數

*說明: 選擇排序

void selectionsort(int* pdataarray, int idatanum)

}*函式名稱:shellinsert

*引數說明:pdataarray 無序陣列;

* d 增量大小

* idatanum為無序資料個數

*說明: 希爾按增量d的插入排序

void shellinsert(int* pdataarray, int d, int idatanum)

if (j != i - d) //存在比其小的數

pdataarray[j+d] = temp;

} }

*函式名稱:shellsort

*引數說明:pdataarray 無序陣列;

* idatanum為無序資料個數

*說明: 希爾排序

void shellsort(int* pdataarray, int idatanum)

}*函式名稱:bubblesort

*引數說明:pdataarray 無序陣列;

* idatanum為無序資料個數

*說明: 氣泡排序

void bubblesort(int* pdataarray, int idatanum)

int partions(int l,int low,int high)

if(rchild<=size&&a[rchild]>a[max])

if(max!=i)

}}void buildheap(int *a,int size) //建立堆

}void heapsort(int *a,int size) //堆排序

} void mergearray(int a, int first, int mid, int last, int temp)

while (i <= m)

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

while (j <= n)

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

for (i = 0; i < k; i++)

a[first + i] = temp[i];

} void mergesort(int a, int first, int last, int temp)

}bool mergesort(int a, int n)

int main(int argc, char* argv)

insertsort(aa,30000);

double e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;

printf("插入排序%.10f seconds\n",e);

selectionsort(aa,30000);

e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;

printf("選擇排序%.10f seconds\n",e);

shellsort(aa,30000);

e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;

printf("希爾排序%.10f seconds\n",e);

bubblesort(aa,30000);

e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;

printf("起泡排序%.10f seconds\n",e);

quicksort(aa,30000);

e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;

printf("快速排序%.10f seconds\n",e);

heapsort(aa,30000);

e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;

printf("堆排序%.10f seconds\n",e);

mergesort(aa,30000);

e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;

printf("歸併排序%.10f seconds\n",e);

return 0;

} 我弄了很久才出來,請採納吧!拜託了!

還有若是結果中停止程式,是因為你的資料太多太大,只要重新執行一遍就可以了!

c的stl的sort函式是什麼排序,快速排序嗎

不是簡單的快排 stl的sort 演算法,資料量大時採用quick sort,分段遞迴排序,一旦分段後的資料量專小於某個門檻,為避屬免quick sort的遞迴呼叫帶來過大的額外負荷,就改用insertion sort。如果遞迴層次過深,還會改用heap sort。stl的sort 演算法,抄 資料...

這些痣都是什麼意思,這些痣都是什麼意思

太陽穴有痣 太陽穴是我們身體最重要的部位之一。要是太陽穴漲有痣的話必定能財運不斷,而且朋友特別的多,經常會得到朋友的幫助,無論從事什麼行業都能做得風生水起。在事業上有貴人相助做什麼都順利,再加上有痣的部位是在太陽穴,所以頭腦特別的聰明能做成大事,一生錦衣玉食,大富大貴。地庫有痣 地庫範圍內有痣,主富...

This is my family是什麼意思快

意思是 這是我的家人。其中重要單詞有 family。family的意思是 家庭 指 家庭全體成員 時,為集合名詞,作主語時,謂語動詞要用複數形式。作為 家庭整體 看待時,謂語動詞要用單數形式。謂語動詞無論是單數形式還是複數形式,family都應該用複數代詞指代。family有時可作 子女,孩子 解,...