首页 > 代码库 > 经典的排序算法学习(java实现)
经典的排序算法学习(java实现)
1.算法思想
通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,
然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
2.算法图解
3.实现代码
static void quikSort(int n[], int left, int right){ int temp; //定义一个临时的变量 if(left < right){ temp = partition(n, left, right);//将partition返回的值赋给temp quikSort(n, left, temp - 1); //递归调用继续排左边的数 quikSort(n, temp + 1, right); //递归调用继续排右边的数 } } static int partition(int n[], int left, int right){ int pivot = n[left]; //取左边的第一个数作为基数 //循环从右向左,指针移动查找第一个小于pivot的数 while(left < right && n[right] >= pivot){ right--; } if(left < right) //找到第一个小于pivot的数后 n[left++] = n[right]; //将这个数填到n[left]这个位置,left前进一格 /*上面的if部分简化如下: if(left < right){ n[left] = n[right]; left++; //注意:++运算符的用法:要先赋值,再进行自加 } */ //循环从左向右,指针移动查找第一个大于pivot的数 while(left < right && n[left] <= pivot){ left++; } if(left < right) //找到第一个大于pivot的数 n[right--] = n[left]; //将这个数填到n[right]这个位置,right前进一格 //同理简化 /* if(left < right){ n[right] = n[left]; right--; //注意--运算符的用法:先赋值,再进行自减 } */ n[left] = pivot; //退出时,i等于j, 将pivot填到这个里,将数分成两部分,左边的数都小于pivot,右边的数都大于pivot return left; // 返回该划分位置 }
经典的排序算法学习(java实现)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。