排序算法java实现-创新互联
快速排序
分享文章:排序算法java实现-创新互联
文章出自:http://myzitong.com/article/pjpge.html
思路:
为上党等地区用户提供了全套网页设计制作服务,及上党网站建设行业解决方案。主营业务为成都网站设计、网站建设、上党网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!- 从左边选一个目标元素target。 i = left, j = right;
- 从j处右往左遍历,直到找到一个比 target 小的元素;然后从i处左往右遍历,直到找到一个比target 大的元素;
- 此时a[j]< target; a[i] >target; 我们将二者互换;
- 继续遍历,由于步骤3已经互换元素,此时的a[j] >target, a[i]< target;
我们继续遍历,重复步骤2 ,3直到i, j相遇 - 相遇时,i处之前的元素小于target,i处之后元素均大于target;a[i] 小于target;
- 我们将target 和a[i] 互换。i处之前的元素小于a[i],i处之后元素均大于a[i];
- 递归地处理左区间和右区间
public static void quickSort(int[] arr) {// int[] arr = {3,1,4,7,2,9,8};
doQuickSort(arr, 0, arr.length-1);
}
private static void doQuickSort(int[] arr, int left, int right) {if(left >= right) return;
int base = arr[left];
int i = left,j = right;
while (i< j) {while (arr[j] >= base && i< j) {j--;
}
while (arr[i]<= base && i< j) i++;
if(i< j) {int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
arr[left] = arr[i];
arr[i] = base;
doQuickSort(arr, left, i-1);
doQuickSort(arr, i+1, right);
}
归并排序public static void divideSort(int[] arr, int left, int right) {if(left >= right)
return;
//取中间索引
int mid = (left + right)/2;
//分别排序
divideSort(arr,left,mid);
divideSort(arr,mid+1,right);
//合并结果
merge(arr,left,mid,right);
}
public static void merge(int[] arr,int left,int mid,int right) {int[] temp = new int[right-left+1];//建立临时数组
int i = left;
int j = mid + 1;//指向两个数组的起始位置
int k = 0;//指向临时数组的起始位置
while(i<= mid && j<= right) {if(arr[i] >= arr[j]) {//将更小的arr[j]放进临时数组中
temp[k++] = arr[j++];
}else {//将更小的arr[i]放进临时数组中
temp[k++] = arr[i++];
}
}
while(i<= mid) {//前一个数组还有剩余
temp[k++] = arr[i++];
}
while(j<= right) {//前一个数组还有剩余
temp[k++] = arr[j++];
}
//将临时数组中的值更新到原始数组中
for(int p = 0;p< temp.length;p ++) {arr[left+p] = temp[p];
}
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享文章:排序算法java实现-创新互联
文章出自:http://myzitong.com/article/pjpge.html