首页 > 代码库 > 写一下快速排序和堆排序,两个简单又神奇的算法
写一下快速排序和堆排序,两个简单又神奇的算法
快速排序
void quick_sort(int array[], int begin, int end) { if(end > begin) { int pivot = begin; int last_small = begin; int i = end; while(last_small != i) { if(array[i] <= array[pivot]) { int temp = array[i]; array[i] = array[++last_small]; array[last_small] = temp; } else i--; } int tmp = array[pivot]; array[pivot] = array[last_small]; array[last_small] = tmp; quick_sort(array, begin, last_small - 1); quick_sort(array, last_small + 1, end); } }
堆排序
void adjust_heap(int[], int, int); void build_heap(int array[], int size)//build the max-heap { for(int i = size - 1; i >= 0; i--) { adjust_heap(array, size, i); } } void adjust_heap(int array[], int size, int element)//adjust the max-heap { int left = element * 2 + 1; int right = left + 1; while(right < size) { if(array[element] >= array[left] && array[element] >= array[right]) return; if(array[left] >= array[right]) { int tmp = array[left]; array[left] = array[element]; array[element] = tmp; element = left; } else { int tmp = array[right]; array[right] = array[element]; array[element] = tmp; element = right; } left = element * 2 + 1; right = left + 1; } if(left < size && array[left] > array[element]) { int tmp = array[left]; array[left] = array[element]; array[element] = tmp; } } void heap_sort(int array[], int size)//heap sort { build_heap(array, size); for(int i = size - 1; i > 0; i--) { int tmp = array[i]; array[i] = array[0]; array[0] = tmp; adjust_heap(array, i, 0); } }
写一下快速排序和堆排序,两个简单又神奇的算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。