快速排序 这个还没学过看了下还没看懂 虽然还是得试着下还是希望各位前辈们写一个我好对着参考参考 谢谢......................(ps:我希望的是最基本的快速排序 关键数据为array[0]) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 给你一个最基本关于数组元素的排序。<SCRIPT LANGUAGE="JavaScript"><!--var arr=[9,2,5,4,3,1,0];function c(a,b){return a-b;}document.write(arr.sort(c));//--></SCRIPT> js冒泡排序不知能帮到你的忙:<script language="javascript"> var DataOne=new Array(5,3,7,8,3,1,2,0,100) var len=DataOne.length for(var i=0;i<len;i++) { for(var j=0;j<len;j++) { One=DataOne[j] Two=DataOne[j+1] if(One<Two) { DataOne[j]=Two DataOne[j+1]=One } } } var str="" for(var n=0;n<len;n++) { str+=DataOne[n]+"," } alert(str) </script> function InsertSort(arr) { //插入排序->直接插入法排序 var st = new Date(); var temp, j; for(var i=1; i<arr.length; i++) { if((arr[i]) < (arr[i-1])) { temp = arr[i]; j = i-1; do { arr[j+1] = arr[j]; j--; } while (j>-1 && (temp) < (arr[j])); arr[j+1] = temp; }//endif } status = (new Date() - st) + ' ms'; return arr; } function ShellSort(arr) { //插入排序->希儿排序 var st = new Date(); var increment = arr.length; do { increment = (increment/3|0) + 1; arr = ShellPass(arr, increment); } while (increment > 1) status = (new Date() - st) + ' ms'; return arr; } function ShellPass(arr, d) { //希儿排序分段执行函数 var temp, j; for(var i=d; i<arr.length; i++) { if((arr[i]) < (arr[i-d])) { temp = arr[i]; j = i-d; do { arr[j+d] = arr[j]; j = j-d; } while (j>-1 && (temp) < (arr[j])); arr[j+d] = temp; }//endif } return arr; } function BubbleSort(arr) { //交换排序->冒泡排序 var st = new Date(); var temp; var exchange; for(var i=0; i<arr.length; i++) { exchange = false; for(var j=arr.length-2; j>=i; j--) { if((arr[j+1]) < (arr[j])) { temp = arr[j+1]; arr[j+1] = arr[j]; arr[j] = temp; exchange = true; } } if(!exchange) break; } status = (new Date() - st) + ' ms'; return arr; } function QuickSortDemo(arr) { var st = new Date(); var result = QuickSort(arr); status = (new Date() - st) + ' ms'; return result; } function QuickSort(arr) { //交换排序->快速排序 if (arguments.length>1) { var low = arguments[1]; var high = arguments[2]; } else { var low = 0; var high = arr.length-1; } if(low < high){ // function Partition var i = low; var j = high; var pivot = arr[i]; while(i<j) { while(i<j && arr[j]>=pivot) j--; if(i<j) arr[i++] = arr[j]; while(i<j && arr[i]<=pivot) i++; if(i<j) arr[j--] = arr[i]; }//endwhile arr[i] = pivot; // end function var pivotpos = i; //Partition(arr,low,high); QuickSort(arr, low, pivotpos-1); QuickSort(arr, pivotpos+1, high); } else return; return arr; } /*function Partition(arr, i, j) { //快速排序, 对待排序的数组进行划分 var pivot = arr[i]; while(i<j) { while(arr[j]>=pivot) j--; if(i<j) arr[i++] = arr[j]; while(arr[i]<=pivot) i++; if(i<j) arr[j--] = arr[i]; } arr[i] = pivot; return arr; }*/ function SelectSort(arr) { //选择排序->直接选择排序 var st = new Date(); var temp; for(var i=0; i<arr.length; i++) { var k = i; for(var j=i+1; j<arr.length; j++) { if((arr[j]) < (arr[k])) k = j; } if (k != i){ temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; } } status = (new Date() - st) + ' ms'; return arr; } function unicode(str) {//求字符串的unicode码 var uni=0; for(var i=0; i<str.length; i++){ uni += str.charCodeAt(i)/6553.5 * Math.pow(10, str.length-i); } return uni; } </script> function quickSort(array,start,end) { if(start < end) { var s = start; var e = end + 1; var temp = array[s][1]; var temp0 = array[s][0]; while(1) { while((++s)<=end && array[s][1] > temp); while((--e)>=start && array[e][1] < temp); if(s > e) { break; } var tem = array[s][1]; array[s][1] = array[e][1]; array[e][1] = tem; tem = array[s][0]; array[s][0] = array[e][0]; array[e][0] = tem; } array[start][1] = array[e][1]; array[e][1] = temp; array[start][0] = array[e][0]; array[e][0] = temp0; quickSort(array,start,e-1); quickSort(array,e+1,end); }} js里面不是有个sort么?话说在解释型脚本里面用其他排序,效率也高不到哪里去 sort 是可以 但是也得看场合用如果你在面试 考官要你用快速排序去排一个数组 你去用sort 那你可以直接喀擦掉了to unicode 这个例子 我在网上看到过 首先没看懂 其次他连返回直都没有 那该如何测试了to ws_hgo 这个写法跟网上的说法很象 但是我始终不能得到正确的测试数据 如 Partition([1,2,3,4,5,6,7,8],0,7) 返回结果是正确的吗??? <html><head><title>quicksort demo</title></head><body><script>function quicksort(arr, low, high) { low = typeof low == "undefined" ? 0 : low; high = typeof high == "undefined" ? arr.length - 1 : high; if (low >= high) return; var i = low, j = high; var pivot = arr[Math.floor((low + high) / 2)]; while (i <= j) { while (arr[i] < pivot) i++; while (arr[j] > pivot) j--; if (i <= j) { var t = arr[i]; arr[i] = arr[j]; arr[j] = t; i++; j--; } } if (low < j) arguments.callee(arr, low, j); if (i < high) arguments.callee(arr, i, high);}(function () { var list0 = []; var list1 = []; var list2 = []; for (var i = 0; i < 20; i++) { var t = Math.floor(Math.random() * 100); list0.push(t); list1.push(t); list2.push(t); } quicksort(list1); list2.sort(); alert("list0:" + list0 + "\r\nlist1:" + list1 + "\r\nlist2:" + list2);})();</script></body></html>系统默认是按字符串排序,所有对比有些情况会不一样。 <script>function QuickSort_Once(_pnArray, _pnLow, _pnHigh) { // 首先将首元素做为枢轴 var nPivot = _pnArray[_pnLow]; var i = _pnLow, j = _pnHigh; // 设置两个指针,分别指向首尾处 while(i < j) { // 直到两个指针重合 // 从右向左,寻找首个小于枢轴的元素 while(_pnArray[j] >= nPivot && i < j) j--; _pnArray[i] = _pnArray[j]; // 找到后 执行替换 // 从左到右,寻找首个大于枢轴的元素 while(_pnArray[i] <= nPivot && i < j) i++; _pnArray[j] = _pnArray[i]; // 找到后 执行替换 } // 至此i,j两指针重合执行同一位置,i即是新的枢轴位置 _pnArray[i] = nPivot; return i;}function QuickSort(_pnArray, _pnLow, _pnHigh) { if(_pnLow >= _pnHigh) return; // 获取枢轴 var _nPivotIndex = QuickSort_Once(_pnArray, _pnLow, _pnHigh); // 然后对被枢轴分开的两侧进行分别递归 QuickSort(_pnArray, _pnLow, _nPivotIndex - 1); QuickSort(_pnArray, _nPivotIndex + 1, _pnHigh);}/* 排序测试 */(function() { // 10个随机数 var arr = []; for(var i = 0; i < 10; i++) { arr[i] = Math.floor(Math.random() * 60); } document.write('初始值: ' + arr + '<br/>'); QuickSort(arr, 0, arr.length - 1); document.write('排序值: ' + arr);})();</script> <script type="text/javascript">var arr = new Array(6)arr[0] = "10"arr[1] = "5"arr[2] = "40"arr[3] = "25"arr[4] = "1000"arr[5] = "1"document.write(arr + "<br />")document.write(arr.sort())</script>输出:10,5,40,25,1000,11,10,1000,25,40,5请注意,上面的代码没有按照数值的大小对数字进行排序,要实现这一点,就必须使用一个排序函数:<script type="text/javascript">function sortNumber(a,b){return a - b}var arr = new Array(6)arr[0] = "10"arr[1] = "5"arr[2] = "40"arr[3] = "25"arr[4] = "1000"arr[5] = "1"document.write(arr + "<br />")document.write(arr.sort(sortNumber))</script>输出:10,5,40,25,1000,11,5,10,25,40,1000 JavaScript函数中,哪个是在页面显示完全之后调用的? Ext.Msg.alert()报错 如何点击按钮显示一个DIV,点击页面其它地方隐藏这个DIV? 为什么在div上使用滚轮的时候页面不滚动? 如何改变梅花雪树中 节点文字的 大小 字体 ? 关于IE7预览图片缩放的问题 javascript的数组元素为对象时出现的问题 如何让一个DIV层(非图)看起来像渐渐消失 将变量转变为JS对象的问题,急求解!!!在线等待 页面中有两个iframe,为什么用window.frames.frameid方法得不到iframe 为什么实现不了? 求救,关于alert
<!--
var arr=[9,2,5,4,3,1,0];
function c(a,b){return a-b;}
document.write(arr.sort(c));
//-->
</SCRIPT>
var DataOne=new Array(5,3,7,8,3,1,2,0,100)
var len=DataOne.length
for(var i=0;i<len;i++)
{
for(var j=0;j<len;j++)
{
One=DataOne[j]
Two=DataOne[j+1]
if(One<Two)
{
DataOne[j]=Two
DataOne[j+1]=One
}
}
}
var str=""
for(var n=0;n<len;n++)
{
str+=DataOne[n]+","
}
alert(str)
</script>
var st = new Date();
var temp, j;
for(var i=1; i<arr.length; i++) {
if((arr[i]) < (arr[i-1])) {
temp = arr[i];
j = i-1;
do {
arr[j+1] = arr[j];
j--;
}
while (j>-1 && (temp) < (arr[j]));
arr[j+1] = temp;
}//endif
}
status = (new Date() - st) + ' ms';
return arr;
}
function ShellSort(arr) { //插入排序->希儿排序
var st = new Date();
var increment = arr.length;
do {
increment = (increment/3|0) + 1;
arr = ShellPass(arr, increment);
}
while (increment > 1)
status = (new Date() - st) + ' ms';
return arr;
}
function ShellPass(arr, d) { //希儿排序分段执行函数
var temp, j;
for(var i=d; i<arr.length; i++) {
if((arr[i]) < (arr[i-d])) {
temp = arr[i]; j = i-d;
do {
arr[j+d] = arr[j];
j = j-d;
}
while (j>-1 && (temp) < (arr[j]));
arr[j+d] = temp;
}//endif
}
return arr;
}
function BubbleSort(arr) { //交换排序->冒泡排序
var st = new Date();
var temp;
var exchange;
for(var i=0; i<arr.length; i++) {
exchange = false;
for(var j=arr.length-2; j>=i; j--) {
if((arr[j+1]) < (arr[j])) {
temp = arr[j+1];
arr[j+1] = arr[j];
arr[j] = temp;
exchange = true;
}
}
if(!exchange) break;
}
status = (new Date() - st) + ' ms';
return arr;
}
function QuickSortDemo(arr) {
var st = new Date();
var result = QuickSort(arr);
status = (new Date() - st) + ' ms';
return result;
}
function QuickSort(arr) { //交换排序->快速排序
if (arguments.length>1) {
var low = arguments[1];
var high = arguments[2];
} else {
var low = 0;
var high = arr.length-1;
}
if(low < high){
// function Partition
var i = low;
var j = high;
var pivot = arr[i];
while(i<j) {
while(i<j && arr[j]>=pivot)
j--;
if(i<j)
arr[i++] = arr[j];
while(i<j && arr[i]<=pivot)
i++;
if(i<j)
arr[j--] = arr[i];
}//endwhile
arr[i] = pivot;
// end function
var pivotpos = i; //Partition(arr,low,high);
QuickSort(arr, low, pivotpos-1);
QuickSort(arr, pivotpos+1, high);
} else
return;
return arr;
}
/*function Partition(arr, i, j) { //快速排序, 对待排序的数组进行划分
var pivot = arr[i];
while(i<j) {
while(arr[j]>=pivot)
j--;
if(i<j)
arr[i++] = arr[j];
while(arr[i]<=pivot)
i++;
if(i<j)
arr[j--] = arr[i];
}
arr[i] = pivot;
return arr;
}*/
function SelectSort(arr) { //选择排序->直接选择排序
var st = new Date();
var temp;
for(var i=0; i<arr.length; i++) {
var k = i;
for(var j=i+1; j<arr.length; j++) {
if((arr[j]) < (arr[k]))
k = j;
}
if (k != i){
temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
status = (new Date() - st) + ' ms';
return arr;
}
function unicode(str) {//求字符串的unicode码
var uni=0;
for(var i=0; i<str.length; i++){
uni += str.charCodeAt(i)/6553.5 * Math.pow(10, str.length-i);
}
return uni;
}
</script>
if(start < end) {
var s = start;
var e = end + 1;
var temp = array[s][1];
var temp0 = array[s][0];
while(1) {
while((++s)<=end && array[s][1] > temp);
while((--e)>=start && array[e][1] < temp);
if(s > e) {
break;
}
var tem = array[s][1];
array[s][1] = array[e][1];
array[e][1] = tem;
tem = array[s][0];
array[s][0] = array[e][0];
array[e][0] = tem;
}
array[start][1] = array[e][1];
array[e][1] = temp;
array[start][0] = array[e][0];
array[e][0] = temp0;
quickSort(array,start,e-1);
quickSort(array,e+1,end);
}
}
话说在解释型脚本里面用其他排序,效率也高不到哪里去
如果你在面试 考官要你用快速排序去排一个数组
你去用sort 那你可以直接喀擦掉了to unicode 这个例子 我在网上看到过 首先没看懂 其次他连返回直都没有 那该如何测试了to ws_hgo 这个写法跟网上的说法很象 但是我始终不能得到正确的测试数据
如 Partition([1,2,3,4,5,6,7,8],0,7) 返回结果是正确的吗???
<head><title>quicksort demo</title></head>
<body>
<script>
function quicksort(arr, low, high) {
low = typeof low == "undefined" ? 0 : low;
high = typeof high == "undefined" ? arr.length - 1 : high;
if (low >= high) return;
var i = low, j = high;
var pivot = arr[Math.floor((low + high) / 2)]; while (i <= j) {
while (arr[i] < pivot) i++;
while (arr[j] > pivot) j--;
if (i <= j) {
var t = arr[i];
arr[i] = arr[j];
arr[j] = t;
i++;
j--;
}
}
if (low < j) arguments.callee(arr, low, j);
if (i < high) arguments.callee(arr, i, high);
}(function () {
var list0 = [];
var list1 = [];
var list2 = [];
for (var i = 0; i < 20; i++) {
var t = Math.floor(Math.random() * 100);
list0.push(t);
list1.push(t);
list2.push(t);
}
quicksort(list1);
list2.sort();
alert("list0:" + list0 + "\r\nlist1:" + list1 + "\r\nlist2:" + list2);
})();
</script>
</body>
</html>系统默认是按字符串排序,所有对比有些情况会不一样。
<script>
function QuickSort_Once(_pnArray, _pnLow, _pnHigh) {
// 首先将首元素做为枢轴
var nPivot = _pnArray[_pnLow];
var i = _pnLow, j = _pnHigh; // 设置两个指针,分别指向首尾处
while(i < j) { // 直到两个指针重合
// 从右向左,寻找首个小于枢轴的元素
while(_pnArray[j] >= nPivot && i < j) j--;
_pnArray[i] = _pnArray[j]; // 找到后 执行替换 // 从左到右,寻找首个大于枢轴的元素
while(_pnArray[i] <= nPivot && i < j) i++;
_pnArray[j] = _pnArray[i]; // 找到后 执行替换
}
// 至此i,j两指针重合执行同一位置,i即是新的枢轴位置
_pnArray[i] = nPivot;
return i;
}
function QuickSort(_pnArray, _pnLow, _pnHigh) {
if(_pnLow >= _pnHigh) return;
// 获取枢轴
var _nPivotIndex = QuickSort_Once(_pnArray, _pnLow, _pnHigh);
// 然后对被枢轴分开的两侧进行分别递归
QuickSort(_pnArray, _pnLow, _nPivotIndex - 1);
QuickSort(_pnArray, _nPivotIndex + 1, _pnHigh);
}/* 排序测试 */
(function() {
// 10个随机数
var arr = [];
for(var i = 0; i < 10; i++) {
arr[i] = Math.floor(Math.random() * 60);
}
document.write('初始值: ' + arr + '<br/>');
QuickSort(arr, 0, arr.length - 1);
document.write('排序值: ' + arr);
})();
</script>
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"document.write(arr + "<br />")
document.write(arr.sort())</script>输出:10,5,40,25,1000,1
1,10,1000,25,40,5请注意,上面的代码没有按照数值的大小对数字进行排序,要实现这一点,就必须使用一个排序函数:<script type="text/javascript">function sortNumber(a,b)
{
return a - b
}var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"document.write(arr + "<br />")
document.write(arr.sort(sortNumber))</script>输出:10,5,40,25,1000,1
1,5,10,25,40,1000