⑴ sort()数字排序中:定义的函数什么意思,arr.sort(sortNumber)调用的过程给讲一下!谢谢!
sort的参数,为一个函数,那么这个函数接受2个参数,a, b
这个函数在:
a == b 是为0
a > b 时为 1
a < b时 为-1
那么sort在排序的时候,根据冒泡排序,传递2个数进来
对于
arr[0] = "10"
arr[1] = "5"
那么 a=10 b=5,
显然a > b,那么sort根据这个函数返回的结构,就开始排了,
5, 10
那么第一次结束时: 5 10 40 25 1000 1
接下来:然后5 跟 40 25 1000 1排,
完了只有是: 1 10 40 25 1000 5
然后从10 开始,10 - 40 10 <->25 10 <-> 1000 10 <->5
结束后:1 5 40 25 1000 10
再40 : 1 5 10 25 1000 40
再 25 :
再 1000 : 1 5 10 25 40 1000
到此,最后一位就剩一个了,没有啥比较的了,排序完成
⑵ JAVA中Arrays.sort()排序的原理是什么
有的时候需要对数组里的element进行排序。当然可以自己编写合适的排序方法,但既然java包里有自带的Arrays.sort排序方法,在 数组元素比较少的时候为何不用?
Sorting an Array 1. 数字排序 int[] intArray = new int[] { 4, 1, 3, -23 };
Arrays.sort(intArray);
输出: [-23, 1, 3, 4]
2. 字符串排序,先大写后小写 String[] strArray = new String[] { "z", "a", "C" };
Arrays.sort(strArray);
输出: [C, a, z]
3. 严格按字母表顺序排序,也就是忽略大小写排序 Case-insensitive sort
Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);
输出: [a, C, z]
4. 反向排序, Reverse-order sort
Arrays.sort(strArray, Collections.reverseOrder());
输出:[z, a, C]
5. 忽略大小写反向排序 Case-insensitive reverse-order sort
Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);
Collections.reverse(Arrays.asList(strArray));
输出: [z, C, a]
java初学者最常见的错误思想,就是试图去写一些方法来完成数组的排序功能,其实,数组排序功能,在java的api里面早已实现,我们没有 必要去重复制造轮子。
Arrays类有一个静态方法sort,利用这个方法我们可以传入我们要排序的数组进去排序,因为我们传入的是一个数组的引用,所以排序完成的 结果也通过这个引用的来更改数组.对于整数、字符串排序,jdk提供了默认的实现,如果要对一个对象数组排序,则要自己实现 java.util.Comparator接口。
packagecom.gjh.gee.arrays;
importjava.util.Arrays;
publicclassArraySortDemo{
publicvoidsortIntArray(){
int[]arrayToSort=newint[]{48,5,89,80,81,23,45,16,2};
System.out.println("排序前");
for(inti=0;i<arrayToSort.length;i++)
System.out.println(arrayToSort[i]);
//调用数组的静态排序方法sort
Arrays.sort(arrayToSort);
System.out.println("排序后");
for(inti=0;i<arrayToSort.length;i++)
System.out.println(arrayToSort[i]);
}
publicvoidsortStringArray(){
String[]arrayToSort=newString[]{"Oscar","Charlie","Ryan",
"Adam","David"};
System.out.println("排序前");
for(inti=0;i<arrayToSort.length;i++)
System.out.println(arrayToSort[i]);
System.out.println("排序后");
//调用数组的静态排序方法sort
Arrays.sort(arrayToSort);
for(inti=0;i<arrayToSort.length;i++)
System.out.println(arrayToSort[i]);
}
publicvoidsortObjectArray(){
Dogo1=newDog("dog1",1);
Dogo2=newDog("dog2",4);
Dogo3=newDog("dog3",5);
Dogo4=newDog("dog4",2);
Dogo5=newDog("dog5",3);
Dog[]dogs=newDog[]{o1,o2,o3,o4,o5};
System.out.println("排序前");
for(inti=0;i<dogs.length;i++){
Dogdog=dogs[i];
System.out.println(dog.getName());
}
Arrays.sort(dogs,newByWeightComparator());
System.out.println("排序后:");
for(inti=0;i<dogs.length;i++){
Dogdog=dogs[i];
System.out.println(dog.getName());
}
}
publicstaticvoidmain(String[]args){
ArraySortDemot=newArraySortDemo();
t.sortIntArray();
t.sortStringArray();
t.sortObjectArray();
}
}
⑶ 太难理解了!js sort函数详细解释!!
sort函数执行时,会依次循环把数组里的两个数传递给函数f,这时候f的参数a和b就分别是传入的两个数,然后分别求出a和b除以2的余数(实际上就是判断a和b是奇数还是偶数,0是偶数,1是奇数)。如果a是偶数,函数f就返回1(或其他任何大于0的数),如果a是奇数且b是偶数就返回-1(或其他任何小于0的数)。sort函数根据f的返回值来对两个数进行排序,如果是大于0的数,就把两个数的值对调,如果是0或小于0的数则不做任何处理。
这样的话,当数组中的所有元素都两两处理完毕后,最终就会形成奇数在前偶数在后的情况了。
⑷ JavaScript中的sort方法的原理,它是怎么实现的
假如有一个数组,像这样var arr = [1,2,4,3,5,56,223,545];你想排序var newArr = arr.sort(function(a,b){ return a>b;//这样就实现了排序,并返回已排好序的新数组});如果数组里是对象,那么a和b的值便是对象,你只需要将对象中的某个属性拿出来比较就可以了
⑸ js中.sort() 这个括号中的参数是指定义排序顺序的函数,那么上面的这个函数怎么理解了下面例子:
返回一个元素已经进行了排序的 Array 对象。 arrayobj.sort(sortfunction)
参数
arrayObj
必选项。任意 Array 对象。
sortFunction
可选项。是用来确定元素顺序的函数的名称。如果这个参数被省略,
那么元素将按照 ASCII 字符顺序进行升序排列。
说明
sort 方法将 Array 对象进行适当的排序;
在执行过程中并不会创建新的 Array 对象。 如果为 sortfunction 参数提供了一个函数,那么该函数必须返回下列值之一: 负值,如果所传递的第一个参数比第二个参数小。
零,如果两个参数相等。
正值,如果第一个参数比第二个参数大。其实你把a-b(升序),b-a(降序),a-a(不变)
详细出处参考: http://www.jb51.net/article/4168.htm
⑹ javascript sort问题。该函数能实现按照对象的某个属性为标准进行排序
先解释一下
data是数组
sort是数组类型自带的一个排序函数,函数的参数是一个函数(也就是方法)
然后先看createComparisonFunction函数
这个函数返回了一个方法
其方法参数在返回方法内用到,符合了执行作用域的条件,形成闭包,保留了propertyName函数
然后看你的排序data.sort(createComparisonFunction("name"));
你在排序的时候传入参数createComparisonFunction("name")
在执行sort之前会先执行createComparisonFunction("name")
他会返回一个方法,其执行作用域保留
然后开始走排序
data.sort方法会内部循环值排序,他每次比较的2个值会传入你传入的函数参数内,通过你传入的函数参数来判断排序
最后简单解释下createComparisonFunction
object1: 比较的第一个值
object2: 比较的第二个值
propertyName: 就是执行createComparisonFunction的参数
data["name"]其实就是data.name的另一种写法
⑺ C语言中sort函数定义的原理
这是一个选择排序的函数。
用sort(a,3);调用时,
第一轮内循环后,k=2
交换后,a数组成为:5,7,9
第二轮内循环后,k=1
实际并没有交换。
sort()返回后,a数组就是5,7,9
⑻ js中sort()对数组排序的原理是什么为何无法降序字母
sort的函数里面 a 和 b 一般都是number型或是可以转换成number的字符串,进行减操作。
然而你的代码中,a b 都为字母,无法进行减法操作,所以不能进行排序。
建议你用 d.sort().reaverse();
⑼ sort算法的原理
void qsort( void *base,size_t num,size_t width,int (__cdecl *compare )(const void *elem1, const void *elem2 ) );
其中base为起始地址,num为元素个数,
width为每个元素所占内存数,compare( (void *) elem1, (void *) elem2 )自定义比较规则.
最后一个参数的返回值是int型的,num1和num2表示你当前比较的两个元素,根据返回值来决定是否交换num1和num2的位置.
一串数字排序,无论什么算法,每一次比较都是拿出其中的两个数比较,交换,这两个数在这里就是num1和num2.num1和num2是不断在变的,不是固定的.
比如:
for ( i = 0; i < n - 1; ++i )
for ( j = i + 1; j < n; ++j )
if ( a[i] < a[j] ) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
在这里,每次比较时,num1和num2为a[i]和a[j]。
⑽ 列表sort函数原理
函数原理主要还是人家自己设置的一个定义,所以才会变成这样的吧。