class solution
num[i] = temp;
}} return num;
} /*演算法思想綜述:
1.temp存放當前要插入的元素;
2.在當前插入元素之前的所有元素都認為是已排序好的;
3.如果當前元素比前面的元素小,則開始移動元素
*/ /*shell_sort(希爾排序)*/
vectorshell_sort(vectornum)
num[j] = temp;}}
}step = step / 2;
} return num;
} /*演算法綜述:
1.j>i要放在num[j - step]>temp的前面,否則會出現容器下標越界
2.在取增量的時候有可能在後面的元素會被劃分到第1組,而前面相同
的元素卻被劃分到第2組,如下所示:
例子 3 5 10 8 7 2 8 1 20 6
d=2 分成2組 (3 10 7 8 20) 和(5 8 2 1 6) 第一組的8在第二組的後面
*/ /**************************select_sort(選擇排序)*************************************/
/*(******_select_sort)簡單選擇排序,每一趟可以確定兩個元素*/
vector******_select_sort(vectornum)
if (num[j]< num[min])
}//該交換操作還可分情況討論以提高效率
if (num[i] != num[min])
if (num[n - i - 1] != num[max])
} return num;
} /*演算法綜述:
1.趟數的確定,一共n個元素,每次確定兩個元素,一共需要[n/2]趟
2.初始最大最小元素的選取,一定要選擇相同的元素,然後和當前剩餘
元素逐個進行比較。如果最小數和最大數的下標發生變化,則用這兩個
下標對應的元素分別和對應的頭尾元素對換,然後縮小比較範圍。
*/ /*(heap sort)堆排序*/
vectorheap_sort(vector&num,int start, int end)
if (2 * i + 2bubble_sort(vectornum)
}} return num;
} /*演算法綜述:
1.比較和交換同時進行,如果從陣列頭部開始的話,要將較大的數向下沉;
2.如果是陣列尾部開始的話,就要將較小的數向上浮。
*/ vectorbubble_sort_improvement(vectornum)
if (min != i)
} return num;
} /*演算法綜述:
1.改進方法減少了交換的繁瑣操作,同樣是設定比較區間的第乙個數為最小值,然後通過下標
比較找到比預設最小值更小的交換。
2.從本質上來說和簡單選擇排序有異曲同工之處。
*/ //quick_sort(快速排序)
vectorquick_sort(vector&num, int low, int high)
num[low] = key;
quick_sort(num, beg, low - 1);
quick_sort(num, low + 1, end);
return num;
} /* 1、要牢記遞迴的出口if (low >= high)return num;如果沒有,則會出現low比high大,
雖然while (lowmerge_sort(vector&num)
while (i <= mid && j <= high)
while (i <= mid)//若比較完之後,第乙個有序區仍有剩餘,則直接複製到t陣列中
temp[k++] = num[i++];
while (j <= high)//同上
temp[k++] = num[j++];
for (i = low, k = 0; i <= high; i++, k++)//將排好序的存回arr中low到high這區間
num[i] = temp[k];
deletetemp;//刪除指標,由於指向的是陣列,必須用delete
} vectormergesort(vector&num, int low, int high)
return num;
} /*演算法綜述:
1.繼續切割條件if (low2.每次合併所動態分配的記憶體的大小和作用
*/};
排序演算法總結
1 直接插入排序 1 穩定性 穩定 2 適用情況 待排記錄規模較小,或者記錄已經基本有序 2 希爾排序 1 穩定性 不穩定 2 特點 希爾排序的執行時間依賴於增量序列,它的效率比直接插入排序有較大的改進。3 氣泡排序 1 穩定性 穩定 2 特點 當待排記錄基本有序是,氣泡排序是不錯的選擇 但由於氣泡...
排序演算法總結
1 選擇排序 選擇排序的思想是依次從待排序數列中選擇最大 小 的 第二大 小 的等等,然後依次重新排列為有序數列。void selectionsort int a,int n if min i 時間複雜度o n 2 2 歸併排序 void merge int a,int left,int mid,i...
排序演算法總結
學習了這麼多的排序演算法,還沒有做個總結,呵呵 氣泡排序 氣泡排序是最慢的排序演算法。在實際運用中它是效率最低的演算法。它通過一趟又一趟地比較陣列中的每乙個元素,使較大的資料下沉,較小的資料上公升。它是 o n 2 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來...