⑴ 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函數原理
函數原理主要還是人家自己設置的一個定義,所以才會變成這樣的吧。