Ⅰ java中對數組排序除了冒泡和直接遍歷外還有沒更好的方法
初級的排序方法有泡泡,插入和選擇渣液脊.高級的排序方法還有堆排序,希爾排序法,快速排序法. 快速排序法(quick sort)是目前所公認最快的排序方法之一(視解題的對象而定),雖然快速排序法在最差狀況下可埋滾以達O(n2),但是在多數的情況下,快速排序法的效率表現是相當不錯的。 快速排序法的基本精神是在數列中找出適當的軸心,然後將數列一分為二,分別對左邊與右邊數列進行排序,而影響快速排序法效率的正是軸心的選擇。 1. 將最左邊的數設定為軸,並記錄其值為 s 循環處理: 1. 令索引 i 從數列左方往右方找,直到找到大於 s 的數 2. 令索引 j 從數列左右方往左方找,直到找到小於 s 的如滲數 3. 如果 i >= j,則離開循環 4. 如果 i < j,則交換索引i與j兩處的值 5. 將左側的軸與 j 進行交換 6. 對軸左邊進行遞歸 7. 對軸右邊進行遞歸 透過以下演算法,則軸左邊的值都會小於s,軸右邊的值都會大於s,如此再對軸左右兩邊進行遞歸,就可以對完成排序的目的,例如下面的實例,*表示要交換的數,[]表示軸: [41] 24 76* 11 45 64 21 69 19 36* [41] 24 36 11 45* 64 21 69 19* 76 [41] 24 36 11 19 64* 21* 69 45 76 [41] 24 36 11 19 21 64 69 45 76 21 24 36 11 19 [41] 64 69 45 76 在上面的例子中,41左邊的值都比它小,而右邊的值都比它大,如此左右再進行遞歸至排序完成。 public class QuickSort { public static void sort(int[] number) { sort(number, 0, number.length-1); } private static void sort(int[] number, int left, int right) { if(left < right) { int s = number[left]; int i = left; int j = right + 1; while(true) { // 向右找 while(i + 1 < number.length && number[++i] < s) ; // 向左找 while(j -1 > -1 && number[--j] > s) ; if(i >= j) break; swap(number, i, j); } number[left] = number[j]; number[j] = s; sort(number, left, j-1); // 對左邊進行遞迴 sort(number, j+1, right); // 對右邊進行遞迴 } } private static void swap(int[] number, int i, int j) { int t; t = number[i]; number[i] = number[j]; number[j] = t; }}
Ⅱ Java數組排序 幾種排序方法詳細一點
JAVA中在運用數組進行排序功能時,一般有四種方法:快速排序法、冒泡法、選擇排序法、插入排序法。
快速排序法主要是運用了Arrays中的一個方法Arrays.sort()實現。
冒泡法是運用遍歷數組進行比較,通過不斷的比較將最小值或者最大值一個一個的遍歷出來。
選擇排序法是將數組的第一個數據作為最大或者最小的值,然後通過比較循環,輸出有序的數組。
插入排序是選擇一個數組中的數據,通過不斷的插入比較最後進行排序。下面我就將他們的實現方法一一詳解供大家參考。
<1>利用Arrays帶有的排序方法快速排序
publicclassTest2{
publicstaticvoidmain(String[]args){
int[]a={5,4,2,4,9,1};
Arrays.sort(a);//進行排序
for(inti:a){
System.out.print(i);
}
}
}
<2>冒泡排序演算法
publicstaticint[]bubbleSort(int[]args){//冒泡排序演算法
for(inti=0;i<args.length-1;i++){
for(intj=i+1;j<args.length;j++){
if(args[i]>args[j]){
inttemp=args[i];
args[i]=args[j];
args[j]=temp;
}
}
}
returnargs;
}
<3>選擇排序演算法
publicstaticint[]selectSort(int[]args){//選擇排序演算法
for(inti=0;i<args.length-1;i++){
intmin=i;
for(intj=i+1;j<args.length;j++){
if(args[min]>args[j]){
min=j;
}
}
if(min!=i){
inttemp=args[i];
args[i]=args[min];
args[min]=temp;
}
}
returnargs;
}
<4>插入排序演算法
publicstaticint[]insertSort(int[]args){//插入排序演算法
for(inti=1;i<args.length;i++){
for(intj=i;j>0;j--){
if(args[j]<args[j-1]){
inttemp=args[j-1];
args[j-1]=args[j];
args[j]=temp;
}elsebreak;
}
}
returnargs;
}
Ⅲ java數組如何排序
如果是升序可以使用 Arrays.sort(數組名)(注意:要使用這個方法必須導入java.util.Arrays包)或者使用冒泡排序,如果是降序只能自己寫,推薦使用冒泡排序
Ⅳ 請給出java幾種排序方法
java常見的排序分為:
1 插入類排序
主要就是對於一個已經有序的序列中,插入一個新的記錄。它包括:直接插入排序,折半插入排序和希爾排序
2 交換類排序
這類排序的核心就是每次比較都要「交換」,在每一趟排序都會兩兩發生一系列的「交換」排序,但是每一趟排序都會讓一個記錄排序到它的最終位置上。它包括:起泡排序,快速排序
3 選擇類排序
每一趟排序都從一系列數據中選擇一個最大或最小的記錄,將它放置到第一個或最後一個為位置交換,只有在選擇後才交換,比起交換類排序,減少了交換記錄的時間。屬於它的排序:簡單選擇排序,堆排序
4 歸並類排序
將兩個或兩個以上的有序序列合並成一個新的序列
5 基數排序
主要基於多個關鍵字排序的。
下面針對上面所述的演算法,講解一些常用的java代碼寫的演算法
二 插入類排序之直接插入排序
直接插入排序,一般對於已經有序的隊列排序效果好。
基本思想:每趟將一個待排序的關鍵字按照大小插入到已經排序好的位置上。
演算法思路,從後往前先找到要插入的位置,如果小於則就交換,將元素向後移動,將要插入數據插入該位置即可。時間復雜度為O(n2),空間復雜度為O(1)
package sort.algorithm;
public class DirectInsertSort {
public static void main(String[] args) {
// TODO Auto-generated method stub
int data[] = { 2, 6, 10, 3, 9, 80, 1, 16, 27, 20 };
int temp, j;
for (int i = 1; i < data.length; i++) {
temp = data[i];
j = i - 1;
// 每次比較都是對於已經有序的
while (j >= 0 && data[j] > temp) {
data[j + 1] = data[j];
j--;
}
data[j + 1] = temp;
}
// 輸出排序好的數據
for (int k = 0; k < data.length; k++) {
System.out.print(data[k] + " ");
}
}
}
三 插入類排序之折半插入排序(二分法排序)
條件:在一個已經有序的隊列中,插入一個新的元素
折半插入排序記錄的比較次數與初始序列無關
思想:折半插入就是首先將隊列中取最小位置low和最大位置high,然後算出中間位置mid
將中間位置mid與待插入的數據data進行比較,
如果mid大於data,則就表示插入的數據在mid的左邊,high=mid-1;
如果mid小於data,則就表示插入的數據在mid的右邊,low=mid+1
最後整體進行右移操作。
時間復雜度O(n2),空間復雜度O(1)
package sort.algorithm;
//折半插入排序
public class HalfInsertSort {
public static void main(String[] args) {
int data[] = { 2, 6, 10, 3, 9, 80, 1, 16, 27, 20 };
// 存放臨時要插入的元素數據
int temp;
int low, mid, high;
for (int i = 1; i < data.length; i++) {
temp = data[i];
// 在待插入排序的序號之前進行折半插入
low = 0;
high = i - 1;
while (low <= high) {
mid = (low + high) / 2;
if (temp < data[mid])
high = mid - 1;
else
// low=high的時候也就是找到了要插入的位置,
// 此時進入循環中,將low加1,則就是要插入的位置了
low = mid + 1;
}
// 找到了要插入的位置,從該位置一直到插入數據的位置之間數據向後移動
for (int j = i; j >= low + 1; j--)
data[j] = data[j - 1];
// low已經代表了要插入的位置了
data[low] = temp;
}
for (int k = 0; k < data.length; k++) {
System.out.print(data[k] + " ");
}
}
}
四 插入類排序之希爾排序
希爾排序,也叫縮小增量排序,目的就是盡可能的減少交換次數,每一個組內最後都是有序的。
將待續按照某一種規則分為幾個子序列,不斷縮小規則,最後用一個直接插入排序合成
空間復雜度為O(1),時間復雜度為O(nlog2n)
演算法先將要排序的一組數按某個增量d(n/2,n為要排序數的個數)分成若干組,每組中記錄的下標相差d.對每組中全部元素進行直接插入排序,然後再用一個較小的增量(d/2)對它進行分組,在每組中再進行直接插入排序。當增量減到1時,進行直接插入排序後,排序完成。
package sort.algorithm;
public class ShellSort {
public static void main(String[] args) {
int a[] = { 1, 54, 6, 3, 78, 34, 12, 45, 56, 100 };
double d1 = a.length;
int temp = 0;
while (true)
{
//利用這個在將組內倍數減小
//這里依次為5,3,2,1
d1 = Math.ceil(d1 / 2);
//d為增量每個分組之間索引的增量
int d = (int) d1;
//每個分組內部排序
for (int x = 0; x < d; x++)
{
//組內利用直接插入排序
for (int i = x + d; i < a.length; i += d) {
int j = i - d;
temp = a[i];
for (; j >= 0 && temp < a[j]; j -= d) {
a[j + d] = a[j];
}
a[j + d] = temp;
}
}
if (d == 1)
break;
}
for (int i = 0; i < a.length; i++)
System.out.print(a[i]+" ");
}
}
五 交換類排序之冒泡排序
交換類排序核心就是每次比較都要進行交換
冒泡排序:是一種交換排序
每一趟比較相鄰的元素,較若大小不同則就會發生交換,每一趟排序都能將一個元素放到它最終的位置!每一趟就進行比較。
時間復雜度O(n2),空間復雜度O(1)
package sort.algorithm;
//冒泡排序:是一種交換排序
public class BubbleSort {
// 按照遞增順序排序
public static void main(String[] args) {
// TODO Auto-generated method stub
int data[] = { 2, 6, 10, 3, 9, 80, 1, 16, 27, 20, 13, 100, 37, 16 };
int temp = 0;
// 排序的比較趟數,每一趟都會將剩餘最大數放在最後面
for (int i = 0; i < data.length - 1; i++) {
// 每一趟從開始進行比較,將該元素與其餘的元素進行比較
for (int j = 0; j < data.length - 1; j++) {
if (data[j] > data[j + 1]) {
temp = data[j];
data[j] = data[j + 1];
data[j + 1] = temp;
}
}
}
for (int i = 0; i < data.length; i++)
System.out.print(data[i] + " ");
}
}
Ⅳ 用java寫 定義一個數組 將它們從小到大排列
最佳答案渣模:冒泡排序演算法。一下為C#語言例子指畢:
int temp = 0;
int[] arr = { 23, 44, 66, 76, 98, 11, 3, 9, 7 };
Console.WriteLine("排序如逗緩前的數組:");
foreach (int item in arr)
{
Console.Write(item + " ");
}
Console.WriteLine();
for (int i = 0; i < arr.Length-1; i++)
{
for (int j = 0; j < arr.Length-1-i; j++)
{
if (arr[j+1] > arr[j])
{
temp = arr[j+1];arr[j+1] = arr[j];arr[j] = temp; }
}
}
Console.WriteLine("排序後的數組:");
foreach (int item in arr)
{
Console.Write(item + " ");
}
Console.WriteLine();
Console.ReadKey();
}
Ⅵ java 數組排序的方法
Arrays.sort()是按升序對數組進行排序的,當然會是矮的在前面了。
Ⅶ java怎麼讓數組的數字從大到小排序
將數字從大到小排序的方法:
例如簡一點的冒泡排序,將第一個數字和後面的數字逐個比較大小,如果小於,則互換位置,大於則不動。此時,第一個數為數組中的最大數。然後再將第二個數與後面的數逐個比較,以次類推。
示例代碼如下:
publicclassTest{
publicstaticvoidmain(String[]args){
int[]array={12,3,1254,235,435,236,25,34,23};
inttemp;
for(inti=0;i<array.length;i++){
for(intj=i+1;j<array.length;j++){
if(array[i]<array[j]){
temp=array[i];
array[i]=array[j];
array[j]=temp; //兩個數交換位置
}
}
}
for(inti=0;i<array.length;i++){
System.out.print(array[i]+"");
}
}
}
數組對於每一門編程語言來說都是重要的數據結構之一,當然不同語言對數組的實現及處理也不盡相同。
Java 語言中提供的數組是用來存儲固定大小的同類型元素。
你可以聲明一個數組變數,如 numbers[100] 來代替直接聲明 100 個獨立變數 number0,number1,....,number99
(7)java數組排序快速擴展閱讀
Java中利用數組進行數字排序一般有4種方法:
1、選擇排序是先將數組中的第一個數作為最大或最小數,然後通過循環比較交換最大數或最小數與一輪比較中第一個數位置進行排序。
2、冒泡排序也是先將數組中的第一個數作為最大或最小數,循環比較相鄰兩個數的大小,滿足條件就互換位置,將最大數或最小數沉底。
3、快速排序法主要是運用Arrays類中的Arrays.sort方法()實現。
4、插入排序是選擇一個數組中的數據,通過不斷的插入比較最後進行排序。
Ⅷ java 數組順序排列
首先,API裡面寫了: Sorts the specified array of ints into ascending numerical order.
就是這是個升序!
其次,你這個運行應該不會報錯,輸出的會是 數組地址,因為數組在java裡面是一個對象,如果要看排序的結果,需要遍歷下:
比如
for(int i:arr){
System.out.println(i);
}
Ⅸ java中定義一個一維數組,有什麼方法可以把數組排序
整吵悄沒數數組么。。
import java.util.Arrays;
public class SortArray {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] nums = { 22, 33, 11, 223, 435, 54, 332, 32, 5, 65, 321, 43 };
// 第一種方法 直接用API提供的升納方法默認是升序排列
Arrays.sort(nums);
for (int num : nums) {
System.out.print(num + " ");
}
System.out.println();
//運毀 第二種方法 自己寫 冒泡排序
nums = new int[] { 22, 33, 11, 223, 435, 54, 332, 32, 5, 65, 321, 43,
543, 432, 7765, 321 };
for (int i = 0; i < nums.length; i++) {
for (int m = i; m < nums.length; m++) {
if (nums[i] > nums[m]) {
int temp = nums[i];
nums[i] = nums[m];
nums[m] = temp;
}
}
}
for (int num : nums) {
System.out.print(num + " ");
}
}
}
Ⅹ 如何用java對數組內的數排序
用兆灶冒泡排序
arry是一個數組。你隨便定義吧?
static void BubbleSort(int arry []){
int temp=0;
for (int i = 0; i < arry.length ; i++) {
for (int j = 0; j < arry.length - i - 1; j++){
if (arry[j]>arry[j + 1]){ //把這里族敬扮改成大於,就是升序了稿飢
temp=arry[j];
arry[j]=arry[j + 1];
arry[j + 1]=temp;
}
}
}
}