利用索引数组排序 不改变原数组值的位置

1.定义一个和要排序数组a[10]长度一样的数组, 这里定义为10,index[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9},值为10个下标。

2. 用冒泡排序,索引值代替小下标即可

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
    int a[10] = {4, 2, 1, 6, 7, 9, 0, 3, 5, 8};
    int index[10] = {0, 1, 2, 3, 4, 5, 6, 7 ,8, 9};
    for(int i = 0; i < 10 - 1; i++) {
        for(int j = 0; j < 10 - i - 1; j++) {
            if(a[index[j]] > a[index[j + 1]]) {
                int temp = index[j];
                index[j] = index[j + 1];
                index[j + 1] = temp;
            }
        }
    }
    for(int i = 0; i < 10; i++) {  //打印原数组(未排序)的值
        printf("%d ", a[i]);
    }
    printf("\n");
    for(int i = 0; i < 10; i++) { //打印排好序的值
        printf("%d ", a[index[i]]);
    }
    return 0;
}

利用索引数组排序 不改变原数组值的位置

时间: 2024-10-07 02:15:30

利用索引数组排序 不改变原数组值的位置的相关文章

是否改变原数组的常用方法归纳

改变原数组: 1.pop()  删除数组最后一个元素,如果数组为空,则不改变数组,返回undefined,改变原数组,返回被删除的元素 2.push()   向数组末尾添加一个或多个元素,改变原数组,返回新数组的长度 3.reverse()   颠倒数组中元素的顺序,改变原数组,返回该数组 4.shift()   把数组的第一个元素删除,若空数组,不进行任何操作,返回undefined,改变原数组,返回第一个元素的值 5.sort()   对数组元素进行排序,改变原数组,返回该数组 6.spli

数组中的方法-- 会改变原数组的

我总结数组中的方法归为两类,一种是会改变原数组的,一种是不改变原数组的 这里将会介绍改变原数组的方法 1.pop()移除数组最后一个元素 var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.pop(); console.log(fruits) //[ 'Banana', 'Orange', 'Apple' ] 2.push()把元素添加到数组尾部 var fr

js中改变原数组的方法以及解决改变原数组的方法

改变原数组的方法 pop():删除数组最后一个元素,并返回该元素 push():在数组尾部添加元素,并返回更新后的数组长度 shift():删除数组的第一个元素,并返回该元素 unshift():在数组第一位添加元素,并返回更新后的数组长度 sort():对数组排序(按字符ASCII进行排序),也可添加回调函数按照想要的规则排序 reverse():数组反转 splice(index, howmany, 新数据):返回被删除元素所组成的数组. 解决改变原数组的方法 背景:需要一个和原数组相等的数

数组方法总结---改变原数组和不改变数组

<script>先来看看基础 // 1 数组定义方法 new Array 或 字面量 var arr = new Array() var arr1 = [1, 2, 3, 4, 5, 6] </script> 需要注意的是 new Array()创建的数组只有一位的时候,第一位代表的数组长度,而不是第一位的值,而且不能为小数 接下来是数组方法:可以先分为两类  改变原数组和不改变原数组 改变原数组:push() 用于在数组的末端添加一个或多个元素,并返回添加新元素后的数组长度 //

task 2:移出数组arr中与2相等的元素,并生成一个新数组,不改变原数组。

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>移出数组arr中与2相等的元素,并生成一个新数组,不改变原数组.</title> </head> <body> <script> var arr = [1,2,3,4,2,5,6,2,7,2]; var str4 = arr.slice(1,2); var st

数组的方法中那些会改变原数组呢?

不会改变原来数组的有:concat()---连接两个或更多的数组,并返回结果.every()---检测数组元素的每个元素是否都符合条件.some()---检测数组元素中是否有元素符合指定条件.filter()---检测数组元素,并返回符合条件所有元素的数组.indexOf()---搜索数组中的元素,并返回它所在的位置.join()---把数组的所有元素放入一个字符串.toString()---把数组转换为字符串,并返回结果.lastIndexOf()---返回一个指定的字符串值最后出现的位置,在

合并数组,改变原数组apply与不改变原数组

一看见合并数组,可能第一反应就是concat,concat确实具有我们想要的行为,但它实际上并不附加到现有数组,而是创建并返回一个新数组. 同样你也许会想到ES6的扩展运算符...         但它同样也是新生成一个数组. 但是我们想要附加到我们现有的阵列,运用apply: var array = ['a', 'b'];var elements = [0, 1, 2];array.push.apply(array, elements);console.log(array); // ["a&q

递归找出数组中对象属性为某个值的选项,不改变原数组

arr数组每一项为一个对象,并且每一项可能有children属性,其值为同它本身一样的数组,要求找到数组中checked==true的值(前提:如果其子元素checked==true,那么父级的checked一定为true) 这里的逻辑跟该自定义组件相似:http://www.cnblogs.com/XHappyness/p/7451611.html findValue(arr) { let newArr= [].concat(arr);//把值赋值给一个新数组,而不是赋值引用:如果直接 let

数组中的方法 --- 不改变原数组的方法

1.concat()把元素衔接到数组中. concat() 方法用于连接两个或多个数组. 该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本. 2.every() 方法使用指定函数检测数组中的所有元素: 如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测. 如果所有元素都满足条件,则返回 true 3.filter()返回满足断言函数的数组元素. 4.forEach()为数组的每一个元素调用指定函数. 5indexOf()在数组中查找指定元素.