快速排序
------------恢复内容开始------------
主要思路:
1、确定基准位置,一般取第一个,确定左、右指针,初始左指针一般为首位置,右指针一般为尾位置。
2、左指针寻找大于基准值的数,右指针寻找小于基准值的数,左右指针基于此条件向左向右移动
3、左右指针相遇的位置 与 基准位置的值进行交换,所以此时 基准值左边都是小于基准值的,右边都是大于基准值的
4、递归此函数重复此过程
5、递归前先判断 起始位置要小于结束位置
核心思想就是要划分区域
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
void QuickSort(int num[],int first,int last){
int pivot,right,left;
if (first < last) {
right = last;
left = first;
pivot = first;
while (left < right) {
while (num[left] <= num[pivot] && left < last) {
left++;
}
while (num[right] > num[pivot]) {
right--;
}
if (left < right) {
int temp = num[left];
num[left] = num[right];
num[right] = temp;
}
}
int temp = num[pivot];
num[pivot] = num[right];
num[right] = temp;
QuickSort(num, first, right - 1);
QuickSort(num, right + 1, last);
}
}
int main(){
int num[] = {1,5,8,9,7,6,54,4};
//二分
int len = -1;
for(int i = 0;num[i]; i++){
++len;
}
printf("%d\n",len);
QuickSort(num,0,len - 1);
for(int i = 0; i < len ; i++){
printf("%d\t",num[i]);
}
return 0;
}
------------恢复内容结束------------

浙公网安备 33010602011771号