选择排序java
㈠ java中有哪几种常用的排序方法
最主要的是冒泡排序、选择排序、插入排序以及快速排序
1、冒泡排序
冒泡排序是一个比较简单的排序方法。在待排序的数列基本有序的情况下排序速度较快。若要排序的数有n个,则需要n-1轮排序,第j轮排序中,从第一个数开始,相邻两数比较,若不符合所要求的顺序,则交换两者的位置;直到第n+1-j个数为止,第一个数与第二个数比较,第二个数与第三个数比较,......,第n-j个与第n+1-j个比较,共比较n-1次。此时第n+1-j个位置上的数已经按要求排好,所以不参加以后的比较和交换操作。
例如:第一轮排序:第一个数与第二个数进行比较,若不符合要求的顺序,则交换两者的位置,否则继续进行二个数与第三个数比较......。直到完成第n-1个数与第n个数的比较。此时第n个位置上的数已经按要求排好,它不参与以后的比较和交换操作;第二轮排序:第一个数与第二个数进行比较,......直到完成第n-2个数与第n-1个数的比较;......第n-1轮排序:第一个数与第二个数进行比较,若符合所要求的顺序,则结束冒泡法排序;若不符合要求的顺序,则交换两者的位置,然后结束冒泡法排序。
共n-1轮排序处理,第j轮进行n-j次比较和至多n-j次交换。
从以上排序过程可以看出,较大的数像气泡一样向上冒,而较小的数往下沉,故称冒泡法。
public void bubbleSort(int a[])
{
int n = a.length;
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-i-1;j++)
{
if(a[j] > a[j+1])
{
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
2、选择排序
选择法的原理是先将第一个数与后面的每一个数依次比较,不断将将小的赋给第一个数,从而找出最小的,然后第二个数与后面的每一个数依次比较,从而找出第二小的,然后第三个数与后面的每一个数依次比较,从而找出第三小的.....直到找到最后一个数。
public void sort(int x[])
{
int n=x.length;
int k,t;
for(int i=0;i<n-1;i++)
{
k=i;
for(int j=i+1;j=n;j++)
{
if(x[j]>x[k])k=j;
if(k!=i)
{
t=x[i];
x[i]=x[k];
x[k]=t;
}
}
}
}
3、插入排序
插入排序的原理是对数组中的第i个元素,认为它前面的i-1个已经排序好,然后将它插入到前面的i-1个元素中。插入排序对少量元素的排序较为有效.
public void sort(int obj[])
{
for(int j=1;j<obj.length;j++)
{
int key=obj[j];
int i=j-1;
while(i>=0&&obj[i]>key)
{
obj[i+1]=obj[i];
i--;
}
obj[i+1]=key;
}
}
4、快速排序
快速排序是对冒泡排序的一种改进。它的基本思想是:通过一次排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此大道整个数据变成有序序列。
public void quickSort(int obj[],int low,int high)
{
int i=low;
int j=high;
int keyValue=obj[i];
while(i<j)
{
int temp=0;
while(i<j&&obj[j]>=keyValue)
{
j=j-1;
}
temp=obj[j];
obj[j]=obj[i];
obj[i]=temp;
while(i<j&&obj[i]<=keyValue)
{
i=i+1;
}
temp=obj[j];
obj[j]=ojb[i];
obj[i]=temp;
}
obj[i]=keyValue;
if(low<i-1)
{
quickSort(obj,low,i-1);
}
if(high>i+1)
{
quickSort(obj,i+1,high);
}
}
㈡ java关于选择排序的问题,我写的是升序排列,结果降序了。。。
static class Case2{//选择排序  第一次找到最小的数字放到A[0]的位置,第二次是次小的放到a【1】。。。
        static String select(int [] array){
            for(int i=0;i<array.length;i++){//进行数组长度次选择,因为每个都要选择
                for(int j=0;j<array.length;j++){//选出该次最小的那个数字,放在A【i】
                    if(array[j]>array[i]){
                        int temp=array[j];
                        array[j]=array[i];
                        array[i]=temp;
                    }
                }
            }
            return Arrays.toString(array);
        }
㈢ java怎么实现排序
Java实现几种常见排序方法 
日常操作中常见的排序方法有:冒泡排序、快速排序、选择排序、插入排序、希尔排序,甚至还有基数排序、鸡尾酒排序、桶排序、鸽巢排序、归并排序等。
以下常见算法的定义
1. 插入排序:插入排序基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
2. 选择排序:选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
3. 冒泡排序:冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端。
4. 快速排序:快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
5. 归并排序:归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
6. 希尔排序:希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
https://www.cnblogs.com/wangmingshun/p/5635292.html
㈣ JAVA选择排序算法方法
下面是我自己定的一个int数组排序的工具,希望对你有帮助。
package net.ftng.util.Order;
public class IntArrayOrder {
 /**
  * @param args
  */
  public static void main(String[] args) {
  int[] a = { 12, 6, 14, 7, 18, 9 };
   
  System.out.print("noOrderByAnything====>:");
  for (int t : a) {
  System.out.print(t + " ");
  }
   
  System.out.println();
   
  System.out.print("orderByAscend====>:");
  int[] temp = lightOrderByAscend(a);
  for (int t : temp) {
  System.out.print(t + " ");
  }
 
  System.out.println();
 
  System.out.print("orderByDescend====>:");
  temp = lightOrderByDescend(a);
  for (int t : temp) {
  System.out.print(t + " ");
  }
 
  }
 static public int[] lightOrderByAscend(int[] args) {
  try {
   int temp;
   int[] tempargs = args.clone();
   int argsLength = tempargs.length;
   for (int i = 0; i < argsLength; i++) {
    for (int j = i + 1; j < argsLength; j++) {
     if (tempargs[i] < tempargs[j]) {
      temp = tempargs[i];
      tempargs[i] = tempargs[j];
      tempargs[j] = temp;
     }
    }
   }
   return tempargs;
  } catch (Exception e) {
   return null;
  }
 }
 static public int[] deepOrderByAscend(int[] args) {
  try {
   int temp;
   int argsLength = args.length;
   for (int i = 0; i < argsLength; i++) {
    for (int j = i + 1; j < argsLength; j++) {
     if (args[i] < args[j]) {
      temp = args[i];
      args[i] = args[j];
      args[j] = temp;
     }
    }
   }
   return args;
  } catch (Exception e) {
   return null;
  }
 }
 static public int[] lightOrderByDescend(int[] args) {
  try {
   int temp;
   int[] tempargs = args.clone();
   int argsLength = tempargs.length;
   for (int i = 0; i < argsLength; i++) {
    for (int j = i + 1; j < argsLength; j++) {
     if (tempargs[i] > tempargs[j]) {
      temp = tempargs[i];
      tempargs[i] = tempargs[j];
      tempargs[j] = temp;
     }
    }
   }
   return tempargs;
  } catch (Exception e) {
   return null;
  }
 }
 static public int[] deepOrderByDescend(int[] args) {
  try {
   int temp;
   int argsLength = args.length;
   for (int i = 0; i < argsLength; i++) {
    for (int j = i + 1; j < argsLength; j++) {
     if (args[i] > args[j]) {
      temp = args[i];
      args[i] = args[j];
      args[j] = temp;
     }
    }
   }
   return args;
  } catch (Exception e) {
   return null;
  }
 }
}
㈤ 用java写个选择排序
import java.util.Random;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Sort {
 public static void quickSort(int a[],int p,int r)
 {
  if(p<r)
  {
   int q=Partition(a,p,r);
   quickSort(a,p,q-1);
   quickSort(a,q+1,r);
  }
 }
 public static int Partition(int a[],int p,int r)
 {
  int i=p+1;
  int j=r;
  int x = a[p];
  //将<x的元素交换到左边区域
  //将>x的元素交换到右边区域
  while(true)
  {
   while(a[i]<x)
   {
    i=i+1;
   }
   while(a[j]>x)
   {
    j=j-1;
   }
   if(i>=j)
    break;
   int temp;
   temp = a[i];
   a[i] = a[j];
   a[j] = temp;
  }
  a[p]=a[j];
  a[j]=x;
  return j;
 }
 
 public static void InsertionSort(int arr[],int start,int end)
 {
  for(int p=start;p<=end;p++)
  {
   int temp = arr[p];
   int pt = p-1;
   while(pt>=1&&arr[pt]>temp)
   {
    arr[pt+1] = arr[pt];
    pt = pt-1;
   }
   arr[pt+1] = temp;
  }
 }
 
 public static void HeapSort(int arr[],int node_number)
 {
  for(int parents= node_number/2;parents>=1;parents--)
  {
   int k = parents;
   int v = arr[k];
   boolean heap = false;
   while(!heap&&2*k<=node_number)
   {
    int j = 2*k;
    if(j<node_number)
    {
     if(arr[j]<arr[j+1])
      j = j + 1;
    }
    if(v>=arr[j])
      heap = true;
    else
    {
     arr[k] = arr[j];
     k = j;
     continue;
    }
   }
   arr[k] = v;
  }
 }
 
 public static void HeapOut(int arr[])   //将构造的堆取出根节点,送往临时数组
 {
  int sorted_arr[] = new int [100];
     int p = 99;
  int node_number = 100;
     
  while(node_number>0&&p>=0)
  {
   sorted_arr[p] = arr[1];
         arr[1] = arr[node_number];     //将最后一个元素赋给根节点
         node_number = node_number - 1;     //节点数减1
         p = p-1;
         HeapSort(arr,node_number);      //反复构造堆
  }
  for(int i=1;i<100;i++)
     {
        arr[i] = sorted_arr[i-1];
     }
  
 }
 
 public static void welcome()        //欢迎界面
 {
  System.out.println("~~~~~~~~Sort the array~~~~~~~~~");
  System.out.println("       Please choose :");
  System.out.println(" 1.Quick Sort.");
  System.out.println(" 2.Insertion Sort.");
  System.out.println(" 3.Heap Sort.");
 }
 
 public static void makearr(int arr[])    //随机数生成器
 {
  long seed = 9;
  Random rnums = new Random(seed);
  for(int j=0;j<101;j++)
  {
   arr[j] = rnums.nextInt(1000);
  }
 }
 
 public static void main(String[] args)
 {
  int arr[] = new int [101];
  welcome();                 //欢迎界面
  boolean cnti = true;       //用户选择是否尝试另一种排序方法
  boolean sorted = false;    //用户是否选择了三种排序中的一种并顺利排序
  char choice;               //键盘输入
  while(cnti==true)
  {
   makearr(arr);
   try{
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    choice = (char)in.read();
    switch(choice)
    {
     case '1':
      quickSort(arr, 1, 100);
      sorted = true;
      break;
     case '2':
      InsertionSort(arr,1,100);
      sorted = true;
      break;
     case '3':
      HeapSort(arr,100);
      HeapOut(arr);
      sorted = true;
      break;
     default:
      System.out.println("Please input your choice in 1,2,3");
      break;
    }
   }
   catch(IOException e) 
   {}
   if(sorted==true)                      //如果选择正确,输出排序结果
   {
    for(int i=1;i<100;i++)
       {
               System.out.print(arr[i]);
               System.out.print(' ');
       }
    System.out.println();
   }
      System.out.println("Continue trying? [Y/N]");
      char choice1 = 0;
      try{
       BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
       choice1 = (char)in.read();
      }
      catch(IOException e) {}
   if(choice1=='Y'||choice1=='y')
      {
       welcome();
       cnti = true;
       sorted = false;
       continue;
      }
      else
       cnti = false;
 //}
   }
 }
}
㈥ java 选择排序法
你好,很小的错误,看下注释的地方
public class Outfile {
	public static void main(String[] args) {
		int a[] = { 20, 29, 21, 45, 68, 15, 3, 5 };
		for (int i = 0; i < a.length - 1; i++) {
			int min = i;
			for (int j = i + 1; j < a.length; j++) {
				if (a[j] < a[min]) {
					min = j;
				}
			}
			if (min != i) {//这一段从上面内层的for拿了出来
				int b = a[min];
				a[min] = a[i];
				a[i] = b;
			}
		}
		for (int c = 0; c < a.length; c++) {
			System.out.println(a[c]);
		}
	}
} 
运行结果:
3
5
15
20
21
29
45
68
㈦ java的选择排序问题。
public class select{
   public static void main(String[] args){
        int[] arr={2,345,111,1,34,5};
         int temp=0;
         int min=0;
         for(int i=0;i<arr.length-1;i++){            //修改第1处,可选
              min=i;
            
             for(int j=i+1;j<arr.length;j++){
                if(arr[min]>arr[j])              //修改第2处,必选
                       min=j;
               }
              if( min != i) {                //修改第3处,可选
              temp=arr[min];
              arr[min]=arr[i];
              arr[i]=temp;
             }
            }
          System.out.println("排序后的数组为:");
         for (int i=0;i<arr.length;i++){
             
             System.out.print(arr[i]+" ");
           }
    }
   }
㈧ java里的选择排序问题
首先,图1是标准的选择排序算法(经过优化的)。
其次,图3也是选择排序算法,但它算不上标准,是因为它没有经过优化的(比如它在交换时没有if判断是否找到了最小值,假设序列是有序的情况更会体现这种性能上的差异,是冗余的写法),
最后,为什么图2会得不到正确的结果呢?是因为min始终都是外部for里假设的最小值,即使在内部找到比它更小的你也没有保存到它,言外之意就是说你拿到minIndex是错的。
㈨ Java:运用选择排序法,将十个数存入数组a中,通过输入对话框任意输入十个数,从大到小排列
importjava.util.Scanner;
publicclassTest{
publicstaticvoidmain(String[]args){
Scannerscanner=newScanner(System.in);
int[]a=newint[10];
intcount=0;
while(count<10){
System.out.print("输入第【"+(count+1)+"】个数:");
a[count]=scanner.nextInt();
count++;
}
System.out.print(" 排序之前:");
for(inti=0;i<a.length;i++){
System.out.print(a[i]+"");
}
//选择排序
for(inti=0;i<a.length-1;i++){
intmin=i;
for(intj=i+1;j<a.length;j++){
if(a[min]<a[j]){
min=j;
}
}
if(min!=i){
inttemp=a[i];
a[i]=a[min];
a[min]=temp;
}
}
System.out.print(" 排序之后:");
for(inti=0;i<a.length;i++){
System.out.print(a[i]+"");
}
}
}

