常用排序演算法總結

2021-07-04 18:50:29 字數 1907 閱讀 2009

#includeusing namespace std;

//show array

void show(int *ar, int len)

} }}//selectsort

//直接選擇排序不穩定 最好最壞平均時間複雜度都是o(n^2) 空間複雜度o(1)

void selectsort(int *ar, int len)

else

}ar[j+1] = temp; }}

//shellsort

void shell(int *ar, int len, int size)

else

}ar[j+size] = temp; }}

void shellsort(int *ar, int len)

;//size

for(int i=0; i= temp)

if(low == high)

else

while(lowlow+1)

if(par < high-1) }

void quicksort(int *ar, int len)

//quicksort2(norecursion)

void quicksort2(int *ar, int len)

if(par < high-1)

}while(top > 0);

delete stack;

}//mergesort(recursion)

void sort(int *ar, int low, int mid, int high)

else

}while(i<=mid)

while(j<=high)

for(int i=low, k=0; i<=high; ++i, ++k)

delete temp;

}void merge(int *ar, int low, int high)

}void mergesort(int *ar, int len)

//mergesort2(norecursion)

void mergesort2(int *ar, int len)

sort(ar, low, mid, high);

low = high+1;

} size *= 2; }}

//堆排序為不穩定排序 時間複雜度為o(nlog2n) 空間複雜度為o(1)

void adjustfromup(int *ar, int start, int end)//調整最大堆 end下標可取

if(temp >= ar[j])//start結點比孩子結點大

ar[i] = ar[j];//將大的孩子結點賦值個雙親結點

//調整下標

i = j;

j = 2*i+1;

} ar[i] = temp;

}void makemaxheap(int *ar, int len)//建立最大堆

}void heapsort(int *ar, int len)

}int main(void)

; int len =sizeof(ia)/sizeof(ia[0]);

//heapsort(ia, len);

//bubblesort(ia, len);

//selectsort(ia, len);

//insertsort(ia, len);

//shellsort(ia, len);

quicksort(ia, len);

//quicksort2(ia, len);

//mergesort(ia, len);

//mergesort2(ia, len);

show(ia, len);

return 0;

}

常用排序演算法總結

總結些常見的排序演算法,方便以後可以重用。資料量不大,為了表達方便就直接使用了陣列。int data null data new int 1.氣泡排序 氣泡排序,從小到大排序 for int i 0 i data.length i 氣泡排序就是說,排序的過程像水裡往上冒的氣泡一樣,每個數字代表乙個氣...

常用排序演算法總結

常用排序演算法總結 選擇排序 對於長度為n的陣列,選擇排序需要大約n2 2詞比較和n次交換。插入排序 對於隨機排列的長度為n且主鍵不重複的陣列 1 平均情況下,需要 n2 4次比較以及 n2 4次交換。2 最壞情況下,需要 n2 2次比較以及 n2 2次交換 3 最好情況下,需要n 1次比較以及0次...

常用排序演算法總結

注 所有排序都是寫的由小到大排序的情況 1.插入排序 1 直接插入排序 穩定 arr sortedindex 1 key 注意這裡的下標 sortedindex 1 2 希爾排序 不穩定 希爾排序好的增量序列的共同特徵 希爾排序演算法 fromid 1801475 type syn 最後乙個增量必須...