js数组去重与排序
来源:互联网 发布:js储存数据 编辑:程序博客网 时间:2024/04/30 13:24
1.关于数组去重
// 常见用法:循环两次数组,第二次循环与第一次循环的值比较,当两次循环的值相等时,不加入到数组中,其余不等添加到新数组中。
// 代码如下;
function delRepeat(arr){
var box = [];//存放去重数据
for (var i = 0; i < arr.length; i++) {
//定义一个旗子,检查是不是有重复的字符
var flag = true;
//遍历存放数据盒子,检查是否等于当前元素
for (var j = 0; j < box.length; j++) {
//如果值存在
if(box[j]==arr[i]){
flag = false;
break;//结束for循环
}
}
if(flag==false){
//continue返回执行函数而不压入数组
continue ;
}
box.push(arr[i]);
}
return box;
}
arr=[1,2,5,1,1,2];
console.log(delRepeat(arr));
// 第二种思路利用下标,当新数组的下标i值不存在时,再添加到新的数组中。
function delRepeat(arr){
var array=[];
for (var i = 0; i < arr.length; i++) {
if (array.indexOf(arr[i])== -1) {
array.push(arr[i]);
}
}
return array;
}
var arr=[1,2,5,2,1,5,5,2,1,1,5,2,2,5,1];
console.log(delRepeat(arr));
// 第三种思路方案
function unique(arr){
var array=[];
var json={};
for (var i = 0; i < arr.length; i++) {
console.log(json[arr[i]])
if (!json[arr[i]]) {
array.push(arr[i]);
json[arr[i]]=1;
}
}
return array;
}
var arr=[1,2,5,2,1,5,5,2,1,1,5,2,2,5,1];
console.log(unique(arr));
//2.二分法查找时,数据需是排好序的。 基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。查看是否有当前元素
function binarySearch(items, value){
var startIndex = 0,
stopIndex = items.length - 1,
middle = Math.floor((stopIndex + startIndex)/2);
while(items[middle] != value && startIndex < stopIndex){
//adjust search area(调整查找范围)
if (value < items[middle]){
stopIndex = middle - 1;
} else if (value > items[middle]){
startIndex = middle + 1;
}
//recalculate middle(重新计算中项索引)
middle = Math.floor((stopIndex + startIndex)/2);
}
//make sure it's the right value(确保返回正确的值)
return (items[middle] != value) ? -1 : middle;
}
var ar = [1,2,3,4,5,6,7,8,9];
var value = binarySearch(ar,100);
console.log(value);
function bubbleSort(arr) {
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length-i; j++) {
if (arr[j] < arr[j - 1]) {
var temp;
temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp; //下沉操作,即交换数组值
}
}
document.write(arr+'----');
document.write('这是第'+(i+1)+'次排序结果'+'</br>')
}
}
bubbleSort(a);
//4.插入排序先把数组中第一个数进入结果数组中作为基准,然后依次选择数组中的数,如果比这个基准数大,则直接放到最后面,如果比这个数小,则依次向前比较,找到合适的地方后,挪出一个空位将其插入。
var a = [3,46,55,2,5,9,8,4,33,7];
function insertSort(arr) {
var result= [];
result.push(arr[0]); //将第一个数最为基准
document.write('第一次排序将数组首个数字放入result结果集'+'</br>');
for (var i = 1; i < arr.length; i++) {
if (arr[i] > result[result.length - 1]) { //如果后来的数比基准数大,直接放到最后面
result[result.length] = arr[i]; //也可以写成result.push(arr[i]);
}
for (var j = result.length; j > 0 && arr[i] < result[j - 1]; j--) { //逐个向前比较,找到比自己大的则交换位置
result[j] = result[j - 1];
result[j - 1] = arr[i];
}
document.write(result+'----');
document.write('这是第'+(i+1)+'次排序结果'+'</br>')
}
}
insertSort(a);
//5.选择排序同样先找一个基准数,如果后面的数比这个小,则交换,一轮下来找到便最小的数,以后以此类推,直至排序完毕。
var a = [3,46,55,2,5,9,8,4,33,7];
function selectSort(arr) {
var min=0;
for (var i = 0; i < arr.length; i++) {
min = i; //将数组排好序部分的后一个数作为基准数
for (var j = i + 1; j < arr.length; j++) {
if (arr[min] > arr[j])
min = j; //找到正确的最小数的数组下标
}
if (min != i) { //将上面找到的数组最小值同数组排好序部分的后一个数替换位置
arr[i]= [arr[min],arr[min]=arr[i]][0]; //交换元素的另一种方式,等效于上面冒泡的temp方式
}
document.write(arr+'----');
document.write('这是第'+(i+1)+'次排序结果'+'</br>')
}
}
selectSort(a);
//6.快速排序利用递归的思想,取一个基准数,比它小的放在左边,比它大的放在右边,以此类推。
function quickSort(arr) {
if(arr.length <= 1){return arr};
var num = Math.floor(arr.length / 2); //向下取整
var numValue = arr.splice(num, 1)[0]; //利用splice方法,取出一个元素,原数组中将去掉这一个;arr.splice(num, 1)的结果是一个数组,因此要[0]一下
var left = [];
var right = [];
for (var i = 0; i < l; i += 1) {
arr[i] < numValue ? left.push(arr[i]) : right.push(arr[i]);
}
return quickSort(left).concat([numValue], quickSort(right));
}
// 常见用法:循环两次数组,第二次循环与第一次循环的值比较,当两次循环的值相等时,不加入到数组中,其余不等添加到新数组中。
// 代码如下;
function delRepeat(arr){
var box = [];//存放去重数据
for (var i = 0; i < arr.length; i++) {
//定义一个旗子,检查是不是有重复的字符
var flag = true;
//遍历存放数据盒子,检查是否等于当前元素
for (var j = 0; j < box.length; j++) {
//如果值存在
if(box[j]==arr[i]){
flag = false;
break;//结束for循环
}
}
if(flag==false){
//continue返回执行函数而不压入数组
continue ;
}
box.push(arr[i]);
}
return box;
}
arr=[1,2,5,1,1,2];
console.log(delRepeat(arr));
// 第二种思路利用下标,当新数组的下标i值不存在时,再添加到新的数组中。
function delRepeat(arr){
var array=[];
for (var i = 0; i < arr.length; i++) {
if (array.indexOf(arr[i])== -1) {
array.push(arr[i]);
}
}
return array;
}
var arr=[1,2,5,2,1,5,5,2,1,1,5,2,2,5,1];
console.log(delRepeat(arr));
// 第三种思路方案
function unique(arr){
var array=[];
var json={};
for (var i = 0; i < arr.length; i++) {
console.log(json[arr[i]])
if (!json[arr[i]]) {
array.push(arr[i]);
json[arr[i]]=1;
}
}
return array;
}
var arr=[1,2,5,2,1,5,5,2,1,1,5,2,2,5,1];
console.log(unique(arr));
//2.二分法查找时,数据需是排好序的。 基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。查看是否有当前元素
function binarySearch(items, value){
var startIndex = 0,
stopIndex = items.length - 1,
middle = Math.floor((stopIndex + startIndex)/2);
while(items[middle] != value && startIndex < stopIndex){
//adjust search area(调整查找范围)
if (value < items[middle]){
stopIndex = middle - 1;
} else if (value > items[middle]){
startIndex = middle + 1;
}
//recalculate middle(重新计算中项索引)
middle = Math.floor((stopIndex + startIndex)/2);
}
//make sure it's the right value(确保返回正确的值)
return (items[middle] != value) ? -1 : middle;
}
var ar = [1,2,3,4,5,6,7,8,9];
var value = binarySearch(ar,100);
console.log(value);
//3.冒泡排序就是把大数往数列的后面沉,自然小数就升起来了。首先需要个for循环来遍历数组,而后每两个数还需要比较交换,且数组最后的数不参与比较,因此再有个阶梯式for的循环。
var a = [3,46,55,2,5,9,8,4,33,7];function bubbleSort(arr) {
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < arr.length-i; j++) {
if (arr[j] < arr[j - 1]) {
var temp;
temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp; //下沉操作,即交换数组值
}
}
document.write(arr+'----');
document.write('这是第'+(i+1)+'次排序结果'+'</br>')
}
}
bubbleSort(a);
//4.插入排序先把数组中第一个数进入结果数组中作为基准,然后依次选择数组中的数,如果比这个基准数大,则直接放到最后面,如果比这个数小,则依次向前比较,找到合适的地方后,挪出一个空位将其插入。
var a = [3,46,55,2,5,9,8,4,33,7];
function insertSort(arr) {
var result= [];
result.push(arr[0]); //将第一个数最为基准
document.write('第一次排序将数组首个数字放入result结果集'+'</br>');
for (var i = 1; i < arr.length; i++) {
if (arr[i] > result[result.length - 1]) { //如果后来的数比基准数大,直接放到最后面
result[result.length] = arr[i]; //也可以写成result.push(arr[i]);
}
for (var j = result.length; j > 0 && arr[i] < result[j - 1]; j--) { //逐个向前比较,找到比自己大的则交换位置
result[j] = result[j - 1];
result[j - 1] = arr[i];
}
document.write(result+'----');
document.write('这是第'+(i+1)+'次排序结果'+'</br>')
}
}
insertSort(a);
//5.选择排序同样先找一个基准数,如果后面的数比这个小,则交换,一轮下来找到便最小的数,以后以此类推,直至排序完毕。
var a = [3,46,55,2,5,9,8,4,33,7];
function selectSort(arr) {
var min=0;
for (var i = 0; i < arr.length; i++) {
min = i; //将数组排好序部分的后一个数作为基准数
for (var j = i + 1; j < arr.length; j++) {
if (arr[min] > arr[j])
min = j; //找到正确的最小数的数组下标
}
if (min != i) { //将上面找到的数组最小值同数组排好序部分的后一个数替换位置
arr[i]= [arr[min],arr[min]=arr[i]][0]; //交换元素的另一种方式,等效于上面冒泡的temp方式
}
document.write(arr+'----');
document.write('这是第'+(i+1)+'次排序结果'+'</br>')
}
}
selectSort(a);
//6.快速排序利用递归的思想,取一个基准数,比它小的放在左边,比它大的放在右边,以此类推。
function quickSort(arr) {
if(arr.length <= 1){return arr};
var num = Math.floor(arr.length / 2); //向下取整
var numValue = arr.splice(num, 1)[0]; //利用splice方法,取出一个元素,原数组中将去掉这一个;arr.splice(num, 1)的结果是一个数组,因此要[0]一下
var left = [];
var right = [];
for (var i = 0; i < l; i += 1) {
arr[i] < numValue ? left.push(arr[i]) : right.push(arr[i]);
}
return quickSort(left).concat([numValue], quickSort(right));
}
0 0
- js数组去重与排序
- JS的数组去重与排序
- js数组重排序与数组去重
- js数组排序去重
- 数组去重与排序
- js数组的去重和排序
- js数组去重并排序
- JS数组扁平化、去重、排序
- js-数组排序及去重
- 数组的去重与排序
- 数组排序去重
- JS 数组去重
- js数组去重
- js 数组去重
- js 数组去重
- js数组去重
- js 数组去重
- js数组去重
- java double比较大小
- hightchat图表展示
- 阶乘的和
- gdufe acm 1361 校庆抽奖
- 第十八套
- js数组去重与排序
- Urlrewrite入门学习(2017-02-12)
- JS 字符串的一些方法
- [BZOJ1355][Baltic2009][KMP]Radio Transmission
- 外挂学习之路(5)--- 写测试call的注意事项
- JSF Validation Error: Value is not valid(值无效)JSF值转换无效的两个解决办法
- 按照已有的模板打印小票<二> ——调用windows打印机打印 可设置字体样式
- 91. Decode Ways -Medium
- php mvc 小学生都能看懂的例子