如果对于一个序列来说,它是完全无序的,那么采用选择排序。有利于交换数据项。 public void selectionSort(){ int out, in, min;
for(out = 0; out < n - 1; out++){ min = out; for(in = out + 1; in < n; in++) if(a[in] < a[min]) min = in; swap(out, min); } } 如果对于一个序列来说,它是部分有序的,那么采用插入排序。有利于比较数据项。 public void insertionSort(){ int in, out; for(out = 1; out < n; out++){ long temp = a[out]; in = out; while(in > 0 && a[in - 1] >= temp){ a[in] = a[in - 1]; --in; } a[in] = temp; }} 至于冒泡排序,不推荐使用。因为,它不管是在比较数据项,还是在交换数据项(或者是复制数据项)都要消耗大量时间。 public void bublleSort(){
int out, in;
for(out = n - 1; out > 1; out--) //n: ing the largest number of array. for(in = 0; in < out; in++) if(a[in] > a[in + 1]) //a: array. swap(in, in + 1); //swap: changed data by this method.}
虽说冒泡是最慢的方法,但是在论坛就要冒泡泡 public class BubbleSort { /** * @author lybjust */ static int[] num = { 3, 4, 1, 5, 7, 2 }; int tempNum; public void bubble(int[] num) { for (int i =num.length-1; i >0; i--) { for (int j = 0; j <i; j++) { if (num[j+1] < num[j]) { swap(j, j+1); } } } } public void swap(int i, int j) { tempNum = num[i]; num[i] = num[j]; num[j] = tempNum; } public static void main(String[] args) { // TODO Auto-generated method stub BubbleSort bubble = new BubbleSort(); bubble.bubble(num); for (int i = 0; i < num.length; i++) { System.out.println(num[i]); } }}
int temp = 0 ;
for (int i = 0 ; i < nu.Length - 1 ; i++)
{
for (int j = i + 1 ; j < nu.Length ; j++)
{
if (nu[i] < nu[j])
{
temp = nu[i] ;
nu[i] = nu[j] ;
nu[j] = temp ;
}
}
}
int temp = 0;
for(int i=0;i<num.length-1;i++) {
for(int j=i+1;j<num.length;j++) {
if(num[i] > num[j]) {
temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
}
for(int i=0;i<num.length;i++) {
System.out.print(num[i] + ",");
}
for(int i=num.length;i>-1;i--){
for(int j=i-1;j>-1;j--){
if(num[i]<num[j]){
int a=num[i];
num[i]=num[j];
num[j]=a;
}
}
}
还有选择排序 分段排序等。
class Test {
public static void main(String[] args) {
int[] num=new int[]{12,4,5,24,3,99,75,44,111};
//冒泡排序 //外循环,在这个例子中,第一次外循环i指向了12,然后进行内循环
for(int i = 0; i < num.length; i++) {
//内循环从尾部开始,也就是从指向111开始向左循环
for (int j = num.length - 1; j > i; j--) {
//挨个的遍历左循环里面的数,如果比外循环的值(第一次是12)大的话,交换
if (num[i] < num[j]) {//我做的是降序,如果想做升序,把这里的小于号<改成大于号>就行了
//这三行是交换的算法
int temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}//这样,第一次外循环执行一个数,内循环执行一遍,就把最大的数放到了第一位
//第二次就把第二大的数,也就是99,放到了第二位,如此循环,会变成一个有序的数组
} //打印结果
for (int i : num)
System.out.print(i + " ");
}
}
int[]num=int new{12,4,5,24,3,99,75,44,111};
int swap = 0 ;
for (int i = 0 ; i < num.Length - 1 ; i++) /*这个循环是用来控制一共有几轮的比较,每一轮比较都会产生 一个最大的数,每轮需比较的数的个数依次递减 */
{
for (int j = i + 1 ; j < num.Length, j++) /*这个循环是用来进行第一轮的比较,结束这个循环时最大的一 个数已经排到了最后 */
{
if (num[i] < num[j]) /*这个IF语句是用来判断num[i] 和 num[j]的大小,然后 把大的往后移,所以,结束IF语句时两两比较的后较大 { 的数就往后移了 */
swap = num[i] ;
num[i] = num[j] ;
num[j] = swap ;
}
}
}
public void selectionSort(){ int out, in, min;
for(out = 0; out < n - 1; out++){
min = out;
for(in = out + 1; in < n; in++)
if(a[in] < a[min])
min = in;
swap(out, min);
}
}
如果对于一个序列来说,它是部分有序的,那么采用插入排序。有利于比较数据项。
public void insertionSort(){ int in, out;
for(out = 1; out < n; out++){
long temp = a[out];
in = out;
while(in > 0 && a[in - 1] >= temp){
a[in] = a[in - 1];
--in;
}
a[in] = temp;
}}
至于冒泡排序,不推荐使用。因为,它不管是在比较数据项,还是在交换数据项(或者是复制数据项)都要消耗大量时间。
public void bublleSort(){
int out, in;
for(out = n - 1; out > 1; out--) //n: ing the largest number of array.
for(in = 0; in < out; in++)
if(a[in] > a[in + 1]) //a: array.
swap(in, in + 1); //swap: changed data by this method.}
public class BubbleSort { /**
* @author lybjust
*/
static int[] num = { 3, 4, 1, 5, 7, 2 };
int tempNum; public void bubble(int[] num) {
for (int i =num.length-1; i >0; i--) {
for (int j = 0; j <i; j++) {
if (num[j+1] < num[j]) {
swap(j, j+1);
}
}
}
} public void swap(int i, int j) {
tempNum = num[i];
num[i] = num[j];
num[j] = tempNum;
} public static void main(String[] args) {
// TODO Auto-generated method stub
BubbleSort bubble = new BubbleSort();
bubble.bubble(num);
for (int i = 0; i < num.length; i++) {
System.out.println(num[i]);
}
}}