2 排序演算法的一點簡單應用

2021-08-15 07:48:04 字數 2834 閱讀 5140

乙個陣列記為a,有序;另乙個陣列記為b,無序; 請列印b中的所有不在a中的數;a陣列長度為n,b陣列長度為m;

code:

//簡單的二分查詢,複雜度為 o(m * log n)

public

static

void

printallnotincluded(int a, int b)

if (a[mid] > b[i]) else

}if (!contains)

}}

現有紅白藍三個不同顏色的小球,亂序排列在一起,請重新排列這些小球,使得紅白藍三色的同顏色的球在一起。這個問題之所以叫荷蘭國旗問題,是因為我們可以將紅白藍三色小球想象成條狀物,有序排列後正好組成荷蘭國旗。

code:

//類似於快速排序的切分過程

public

static

int partition(int arr, int l, int r, int p) else

if (arr[l] > p) else

}return

newint ;

}

在陣列中的兩個數字如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。求整個陣列中逆序對的差值和。

code:

public

static

intsmallsum(int arr)

return mergesort(arr, 0, arr.length - 1);

}public

static

intmergesort(int arr, int l, int r)

int mid = l + ((r - l) >> 1);

return mergesort(arr, l, mid) + mergesort(arr, mid + 1, r) + merge(arr, l, mid, r);

}public

static

intmerge(int arr, int l, int m, int r)

while (p1 <= m)

while (p2 <= r)

for (i = 0; i < help.length; i++)

return res;

}

//測試**

// for test

public

static

intcomparator(int arr)

int res = 0;

for (int i = 1; i < arr.length; i++)

}return res;

}// for test

public

static

int generaterandomarray(int maxsize, int maxvalue)

return arr;

}// for test

public

static

int copyarray(int arr)

int res = new

int[arr.length];

for (int i = 0; i < arr.length; i++)

return res;

}// for test

public

static boolean isequal(int arr1, int arr2)

if (arr1 == null && arr2 == null)

if (arr1.length != arr2.length)

for (int i = 0; i < arr1.length; i++)

}return

true;

}// for test

public

static

void

printarray(int arr)

for (int i = 0; i < arr.length; i++)

system.out.println();

}// for test

public

static

void

main(string args)

}system.out.println(succeed ? "nice!" : "****ing ****ed!");

}

已知乙個整數陣列a[n],找出n個元素在數軸上兩個相鄰元素之間的最大間距。

code:

public static int maxgap(int nums) 

int len = nums.length;

intmin = integer.max_value;

intmax = integer.min_value;

for (int i = 0; i < len; i++)

if (min == max)

boolean hasnum = new boolean[len + 1];

int maxs = new int[len + 1];

int mins = new int[len + 1];

int bid = 0;

for (int i = 0; i < len; i++)

int res = 0;

int lastmax = maxs[0];

for (int i = 1; i <= len; i++)

}return res;

}

2 排序演算法 快速排序

問題描述 利用快速排序演算法對下列例項排序,在演算法執行過程中,寫出陣列 a第一次排序後被分割的過程。a 65,70,75,80,85,55,50,2 解題思想 在快速排序中,記錄的比較和交換是從兩端向中間進行的,關鍵字較大的記錄一次就能交換到後面的單元,總的比較和移動次數較少。對於輸入的陣列a p...

2 排序演算法 氣泡排序

氣泡排序 bubble sort 也是一種簡單直觀的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端。作為最簡單...

演算法筆記2 排序

1.選擇排序 首先,找到陣列中最小的那個元素,其次,將他和陣列第乙個元素交換位置,再次,在剩下的元素中找到最小的元素,將他和陣列的第二個元素交換位置。如此反覆,直到將整個陣列排序。不斷的選擇剩餘元素的最小值 2.插入排序 對部分有序陣列很有效 為了給要插入的元素騰出空間,我們需要將其餘所有元素在插入...