黑马程序员技术交流社区
标题:
qiu求排序代码!参考
[打印本页]
作者:
卑微の小幸福
时间:
2013-11-23 15:24
标题:
qiu求排序代码!参考
求快速排序代码参考理解。完整版!谢谢!急!
作者:
潘际昌
时间:
2013-11-23 15:37
伸手党{:soso_e148:}
作者:
潘际昌
时间:
2013-11-23 15:38
潘际昌 发表于 2013-11-23 15:37
伸手党
要什么排序? 冒泡?选择?
作者:
卑微の小幸福
时间:
2013-11-23 16:02
hehe 谢谢 我哦弄出来了!
作者:
王贺
时间:
2013-11-23 16:07
呵呵 刚好有两个,给你参考下
//冒泡排序
//相邻数之间比较
public static void Sort1(int[] items)
{
for(int i=0; i<items.length-1; i++)
{
for(int j=0; j<items.length-i-1; j++)//-i:让每一次比较的元素减少,-1:避免角标越界。
{
if(items[j]<=items[j+1])
{
int temp = items[j];
items[j] = items[j+1];
items[j+1] = temp;
}
}
}
}
//选择排序
//每个数和其他数都比较一边
public static void Sort2(int[] items)
{
for(int i=0;i<items.length-1;i++)
{
for(int j=i+1;j<items.length;j++)
{
if(items[i]>=items[j])
{
int temp=items[j];
items[j]=items[i];
items[i]=temp;
}
}
}
}
作者:
张天昊76
时间:
2013-11-23 16:18
快速排序java代码:
public class QuickSort {
int[] arr = { 23, 54, 14, 67, 15, 35, 27 };
public QuickSort() {
quick(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
public int getMiddle(int[] list, int low, int high) {
int tmp = list[low]; // 数组的第一个作为中轴
while (low < high) {
while (low < high && list[high] >= tmp) {
high--;
}
list[low] = list[high]; // 比中轴小的纪录移到低端
while (low < high && list[low] <= tmp) {
low++;
}
list[high] = list[low]; // 比中轴大的纪录移到高端
}
list[low] = tmp; // 中轴纪录到尾
return low; // 返回中轴的位置
}
public void _quickSort(int[] list, int low, int high) {
if (low < high) {
int middle = getMiddle(list, low, high); // 将list数组进行一分为二
_quickSort(list, low, middle - 1); // 对低字表进行排序递归排序
_quickSort(list, middle + 1, high); // 对高字表进行排序递归排序
}
}
public void quick(int[] arr2) {
if (arr2.length > 0) { // 查看数组是否为空
_quickSort(arr2, 0, arr2.length - 1);
}
}
}
复制代码
作者:
hurryup
时间:
2013-11-23 16:55
算法如图所示:
快速排序算法的实现依赖于按照枢轴元素x对待排序序列进行划分的过程。
对待排序序列进行划分的做法是:使用两个指针low和high分别指向待划分序列arr的范围
,取low所指向元素为枢轴,即int key=arr[low].划分首先从high所指向位置的元素起向前
逐一搜索到第一个比key小的元素,并将其设置到low所指的位置:然后从low所指位置的
元素起向后逐一搜索到第一个比key大的元素,并将其设置到high所指的位置;不断重复上述
两步直到low=high为止,最后将key设置到low与high共同指向的位置。
使用上述划分方法即可将待排序序列按枢轴元素key分成两个子序列,当然key的选择不一定
必须是arr[low],而可以是arr[low..high]之间的任何数据元素。
具体代码如下:
public class TestSort {
public static void main(String[] args) {
QuickSort qs=new QuickSort();
int arr1[]={44,22,2,32,54,22,88,77,99,11};
qs.arr1=arr1;
qs.sort(0,qs.arr1.length-1);
qs.printArray();
}
}
//输入:数据元素数组arr,划分序列区间[low-high]
//输出:将序列划分为两个子序列并返回枢轴元素key的位置
class QuickSort{//算法partition实现了一次划分的过程。
public int arr1[];
private int partition(int[] arr,int low,int high){
int key=arr[low];//使用arr[low]作为枢轴元素
while(low<high){//从两端交替向内扫描
while(low<high && arr[high]>=key)
high--;
arr[low]=arr[high];//将比key小的元素移向低端
while(low<high && arr[low]<=key)
low++;
arr[high]=arr[low];//将比key大的元素移向高端
}
arr[low]=key;//设置枢轴
return low; //返回枢轴元素位置
}
//在划分算法的基础上,快速排序算法的递归实现如算法sort所示
//输入:数据元素数组arr1,数组arr1的待排序区间[low-high]
//输出:数组arr1以关键字有序
public void sort(int low,int high){
if(low<high){
int result=partition(arr1,low,high);
sort(low,result-1);
sort(result+1,high);
}
}
public void printArray(){
for(int i=0;i<=arr1.length-1;i++)
System.out.print(arr1[i]+" ");
}
}
复制代码
快排.PNG
(59.26 KB, 下载次数: 7)
下载附件
2013-11-23 16:08 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2