// 桶排序 原理:使用数组实现,参与排序的数与数组下标相同,数字排序后所在位置即为对应数组下标所在,初始化时,整个数组均为0,每有一个数找到对应下标,则对应下标所在数组单元内容+1,由于是用数组下标“标记”数字所在位置,所以在一定范围内排序,且数字密度较大时,这个算法是比较可行的,比如班级同学的成绩统计,只需创建成绩上限分值大小的数组即可。但是当参与数的数值较大,且数字密度小的时候就不划算了,比如给63335,23,2排序时,需要创建一个63335的小的数组,是在是有点浪费资源。
简单数组实现 开销大 桶小时 速度快
Scanner scanner
= new Scanner(System.in);
System.out.println("请输入排序的人数:");
int n = scanner.nextInt();
System.out.println("请输入各同学的成绩:");
int[] a = new int[1001];
int tem;
for(int ii=1;ii<=1001;ii++)
a[ii-1]=0;
for(int i=1;i<=n;i++)
{
a[scanner.nextInt()]++;
}
for(int j=0;j<=1000;j++)
for(int k=1;k<=a[j];k++)
System.out.println(j);
for(int m=1;m<=5;m++){
System.out.println("成绩排列:"+a[m-1]);
}
//冒泡排序 原理:是交换排序的一种,按照一定顺序,从起始点开始,依次和下一个数进行比较,每次都把相对大或者小的数放在后面位置上,再和下一个数进行比较....重复上述步骤(每一趟即可确定最后一个位置的数,下一趟即不用与前面确定的数进行比较),如果有N个数,理论上进行N-1趟,即可完成排序。
Scanner scanner = new Scanner(System.in);
System.out.println("请输入参与排序的人数:");
int n = scanner.nextInt();
System.out.println("请输入参与排序的人的成绩与姓名:");
Map<Integer, String> map = new HashMap<Integer,
String>();
int temInt;
int temInt2,temCount =
0,temChange;
String temString;
for(int i=1;i<=n;i++){
temInt = scanner.nextInt();
temString = scanner.next();
map.put(temInt, temString);
}
int[] keySet = new int[map.size()];
System.out.println(keySet.length+"lebgth");
//(int j=1;j<=map.size();j++)
Iterator<Integer> iterator = map.keySet().iterator();
while (iterator.hasNext())
{
temInt2 = iterator.next();
keySet[temCount]
= temInt2;
temCount++;
}
for(int m=1;m<n;m++)
for(int mn=0;mn<n-m;mn++){
if(keySet[mn]>keySet[mn+1]){
temChange=keySet[mn];
keySet[mn]=keySet[mn+1];
keySet[mn+1]=temChange;
}
}
for(int nm =1;nm<=n;nm++){
System.out.println(keySet[nm-1]+":"+map.get(keySet[nm-1]));
}
// 快速排序
list数组实现 类似与二分法
public class QuicksortTest
{
private List<Integer> a = new ArrayList<Integer>();
private void quickSort(int left,int right)
{
// TODO Auto-generated
method stub
int i,j,temp,tempChange;
if(left>=right){
return;
}
temp=a.get(left);
i=left;
j=right;
while(i!=j){
while(a.get(j)>=temp&&i<j)
j--;
while(a.get(i)<=temp&&i<j)
i++;
if(i<j){
tempChange = a.get(i);
a.set(i, a.get(j));
a.set(j, tempChange);
}
}
a.set(left, a.get(i));
a.set(i, temp);
quickSort(left, i-1);
quickSort(i+1, right);
}
public static void main(String[] args)
{
QuicksortTest quicksortTest = new QuicksortTest();
Scanner scanner = new Scanner(System.in);
//quicksortTest.a.add(0);
System.out.println("begain!");
int n = scanner.nextInt();
for(int i=1;i<=n;i++){
quicksortTest.a.add(scanner.nextInt());
}
for (int i =
0; i <n; i++)
{
System.out.println("排序前:第"+(i+1)+"个数="+quicksortTest.a.get(i));
}
quicksortTest.quickSort(0, n-1);
System.out.println("数组的长度:"+quicksortTest.a.size());
for (int i =
0; i <n; i++)
{
System.out.println("排序后:第"+(i+1)+"个数="+quicksortTest.a.get(i));
}
}
}