直接插入排序
void insertionSort(AnyType[] a)
{
int j;
for(int i = 0; i<a.length; i++) {
AnyType tmp = a[p];
for(j=p; j>0 && tmp.compareTo(a[j-1]) < 0; j--) {
a[j] = a[j-1];
a[j] = tmp;
}
}
shell排序
void shellSort(AnyType[] a) {
int j;
for(int gap = a.length/2; gap > 0; gap /= 2) {
for(int i = gap; i < a.length; i++) {
AnyType tmp = a[i];
for(j = i; j>=gap && tmp.compareTo(a[j-gap]) < 0; j-=gap) {
a[j] = a[j-gap];
}
a[j] = tmp;
}
}
}
直接选择排序
void directSort(AnyType[] a) {
for(int i = 0; i < a,length-1; i++) {
int min = a[i];
int k = i;
for(int j = i+1; j < a.length; j++) {
if(a[j] < min) {
min = a[j]
k = j;
}
}
a[k] = a[i];
a[i] = min;
}
}
堆排序
private static int leftChild(int i) {
return 2 * i + 1;
}
void percDown(AnyType[] a, int i, int n) {
int child;
AnyType tmp;
for(tem = a[i]; leftChild(i) < n; i=child) {
child = leftChild(i);
if( child != n-1 && a[child].compareTo(a[child]) < 0) {
child++;
}
if( tmp.compareTo( a[child]) < 0) {
a[i] = a[child];
}
else {
break;
}
}
a[i] = tmp;
}
void heapSort(AnyType[] a) {
for(int i = a.length/2; i >= 0; i--) {
percDown(a, i, a.length);
}
for(int i=a.length-1; i>0; i--) {
swapReferences(a, 0, i);
percDown(a, 0, i);
}
}
冒泡排序
void bubbleSort(AnyType[] a) {
boolean judge = true;
while(judge) {
judge = false;
for(int i=0; i<a.length-1; i++) {
if(a[i] > a[i+1]) {
int tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
judge = true;
}
continue;
}
}
}
快速排序
static void quicksort(int n[], int left, int right) {
int dp;
if (left < right) {
dp = partition(n, left, right);
quicksort(n, left, dp - 1);
quicksort(n, dp + 1, right);
}
}
static int partition(int n[], int left, int right) {
int pivot = n[left];
while (left < right) {
while (left < right && n[right] >= pivot)
right--;
if (left < right)
n[left++] = n[right];
while (left < right && n[left] <= pivot)
left++;
if (left < right)
n[right--] = n[left];
}
n[left] = pivot;
return left;
}
归并排序
void mergeSort(AnyType[] a, AnyType[] tmpArray, int left, int right) {
if(left < right) {
int center = (left + right) / 2;
mergeSort(a, tmpArray, left, center);
mergeSort(a, tmpArray, center+1, right);
merge(a, tmpArray, left, center + 1, right);
}
}
void mergeSort(AnyType[] a) {
AnyType[] tmpArray = (AnyType[]) new Comparable[a.length];
mergeSort(a, tmpArraym, 0, a.length-1);
}
void merge(AnyType[] a, AnyType[] tmpArray, int leftPos, int rightPos, int rightEnd) {
int leftEnd = rightPos - 1;
int tmpPos = leftPos;
int numElements = rightEnd - leftPos + 1;
while( leftPos <= leftEnd && rightPos <= rightEnd) {
if(a[leftPos].compareTo(a[rightPos]) <= 0) {
tmpArray[tmpPos] = a[leftPos++];
}else {
tmpArray[tmpPos++] = a[rightPos++];
}
}
while(leftPos <= leftEnd) {
tmpArray[tmpPos++] = a[leftPos];
}
while(rightPos <= rightEnd) {
tmpArray[tmpPos++] = a[rightPos++];
}
for(int i=0; i < numElements; i++, rightEnd--) {
a[rightEnd] = tmpArray[rightEnd];
}
}
基数排序
public class RadixSort
{
public static void sort(int[] number, int d) //d表示最大的数有多少位
{
intk = 0;
intn = 1;
intm = 1; //控制键值排序依据在哪一位
int[][]temp = newint[10][number.length]; //数组的第一维表示可能的余数0-9
int[]order = newint[10]; //数组orderp[i]用来表示该位是i的数的个数
while(m <= d)
{
for(inti = 0; i < number.length; i++)
{
intlsd = ((number[i] / n) % 10);
temp[lsd][order[lsd]] = number[i];
order[lsd]++;
}
for(inti = 0; i < 10; i++)
{
if(order[i] != 0)
for(intj = 0; j < order[i]; j++)
{
number[k] = temp[i][j];
k++;
}
order[i] = 0;
}
n *= 10;
k = 0;
m++;
}
}
public static void main(String[] args)
{
int[]data =
{73, 22, 93, 43, 55, 14, 28, 65, 39, 81, 33, 100};
RadixSort.sort(data, 3);
for(inti = 0; i < data.length; i++)
{
System.out.print(data[i] + "");
}
}
}