您的位置:首页 > 其它

4000 排序算法之桶排序,冒泡排序,快速排序

2017-08-14 20:32 281 查看

桶排序

问题:将一个包含5个整数(都是0-10的随机数)的数组从小到大排列

思路:

- 创建一个一维数组(长度为11,每一项都为0)arr

- 若第第一个数是5,则arr[5]的值加1,将为五个数都遍历

- 将不为0的项打印出来

js实现代码:

arr = Array(11).fill(0);
let p_arr = randomNumber(5)
let n_arr = [];
//生成随机数组
function randomNumber(count) {
var randomArroy = [];
for(var i of Array(count)) {
randomArroy.push(parseInt(Math.random() * 11) + 1);
}
console.log(randomArroy);
return randomArroy
}
function sort_t() {
for(var i = 0; i < p_arr.length; i++) {
arr[p_arr[i]]++;
}
for(var j=0;j<11;j++){
for(var k=0;k<arr[j];k++){
n_arr.push(j);
}
}
console.log(n_arr);
}
sort_t();


冒泡排序

问题:将一个包含5个整数(都是0-10的随机数)的数组从小到大排列

思路:

- 比较两个相邻的元素

- 按特定顺序交换元素

- 遍历所有元素后,剔除得到的最大的或最小的元素继续遍历

js实现代码:

function randomNumber(count) {
var randomArroy = []
for(var i of Array(count)) {
randomArroy.push(parseInt(Math.random() * 100) + 1)
}
console.log(randomArroy)
return randomArroy
}

function bubbling(arr) {

for(let i = 0; i < arr.length - 1; i++) {
let m;
for(let j = 0; j < arr.length - i - 1; j++) {
//                                  if(arr[j]>arr[j+1]){
//                                      m=arr[j];
//                                      arr[j]=arr[j+1];
//                                      arr[j+1]=m;
//                                  }
//坑点:冒号与逗号的优先级不确定导致的错误
//                      arr[j] < arr[j + 1] ? {} : m = arr[j], arr[j] = arr[j + 1], arr[j + 1] = m;
//                      arr[j] < arr[j + 1] ? {} : (m = arr[j], arr[j] = arr[j + 1], arr[j + 1] = m);
arr[j] < arr[j + 1] ? {} : function(){m = arr[j], arr[j] = arr[j + 1], arr[j + 1] = m}();
}
}
console.log(arr);
}
bubbling(randomNumber(10));

function bubbleSort(arr) {
// var a=((new Date).getTime());
for(var i = 0; i < arr.length - 1; i++) {
var tmp;
for(var j = 0; j < arr.length - i - 1; j++) {
if(arr[j] > arr[j + 1]) {
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
// console.log((new Date).getTime()-a) ;
return arr;
}
//      console.log(bubbleSort(randomNumber(10)));


快速排序

问题:将一个包含10个整数(都是0-100的随机数)的数组从小到大排列

思路:

- 取中间数为基准数

- 比基准数小的放在左边数组,比基准数大的放在右边数组

- 将得到的数组重复以上操作直到排序完成

//随机数函数
function randomNumber(count) {
var randomArroy = []
for(var i of Array(count)) {
randomArroy.push(parseInt(Math.random() * 100) + 1)
}
console.log(randomArroy)
return randomArroy
}
var a = randomNumber(10);

function quickSort(a) {
if(a.length <= 1) {
return a;
}
let left = [],right = [],temp = [];
key = Math.floor(a.length / 2);
temp = a.splice(key, 1);
for(var i = 0; i < a.length; i++) {
temp>a[i]?left.push(a[i]):right.push(a[i]);
}
return quickSort(left).concat(temp, quickSort(right));
}
console.log(quickSort(a));


END

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐