提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
希尔排序是建立在插入排序之上的一种排序方法。希尔排序的时间复杂度比插入排序的时间复杂度更低。
桶排序运用了类似于哈希表的思想,即先将数组中的每个数出现的次数记录在一个新的数组中,在记录到新数组的过程中也就给数组的元素进行了排序,之后根据这个新的数组给原来的数组赋值。桶排序一般适合数据范围比较集中的数组。
提示:以下是本篇文章正文内容,下面案例可供参考
希尔排序
void shellInsterSort(vector<int>& nums, int star, int gap) { //根据希尔排序修改的插入排序
int temp = 0;
int i, j;
for (i = star; i < nums.size(); i += gap) {
temp = nums[i];
for (j = i - gap; j >= 0 && nums[j] > temp; j -= gap) {
nums[j + gap] = nums[j];
}
nums[j + gap] = temp;
}
}
void shellSort(vector<int>& nums) { //希尔排序
int gap;
for (gap = nums.size() / 2; gap >= 1; gap = gap / 2) {
for (int i = 0; i < gap; i++) {
shellInsterSort(nums, i, gap);
}
}
}
桶排序
void bucketSort(vector<int> &nums) {
int max = 0;
int i,j,index = 0;
for (i = 0; i < nums.size(); i++) { //第一遍遍历数组,找到最大值
if (nums[i] > max) max = nums[i];
}
int* count = new int[max + 5]{ 0 }; //根据最大值申请数组空间
for (i = 0; i < nums.size(); i++) { //第二次遍历数组记录原数组里各个元素出现的次数
count[nums[i]]++;
}
for (i = 0; i <= max; i++) { //第三次遍历数组,根据count数组给原数组排序
for (j = 1; j <= count[i]; j++) {
nums[index++] = i;
}
}
delete[] count;
}