您的位置:首页 > 其它

桶排序冒泡排序和快速排序

2017-10-29 11:04 253 查看
  看过的这方面的书籍也是够多了,不实践下感觉根基不牢固。今天开始写写几种基本算法,全当自己练手。

  这台笔记本上的Visual Studio2008、Qt5.7都罢工了,代码只能用Java (eclipse ide)来写了,不过这也不重要。

  1、桶排序法:

1 package nelson.paixu;
2 import java.util.Arrays;
3 import java.util.Scanner;
4
5 public class PaiXu {
6
7     static int [] arr;
8
9     public static void main(String[] args) {
10
11         Scanner sc = new Scanner(System.in);
12         System.out.println("请先输入数据个数:");
13         int num = sc.nextInt();
14         int [] array = new int[num];
15         for(int i=0;i<num;i++)
16         {
17             array[i] = sc.nextInt();
18             sc.nextLine();
19         }
20
21         arr = Arrays.copyOf(array, num);
22
23         System.out.println("您输入的数据如下:");
24         for(int i : arr)
25             System.out.print(i+" ");
26         System.out.println();
27
28         //排序
29         QuickPaixu(0,num-1);
30
31         System.out.println("经过桶排序后的结果如下:");
32         //输出排序后的结果
33         for(int i=0;i<arr.length;i++)
34         {
35             System.out.print(arr[i]+" ");
36         }
37         System.out.println();
38     }
39
40     private static int [] ContainerPaixu(int [] array)
41     {
42         int num = array.length;
43         int [] container = new int[1000];  //输入数据在1000以内
44         Arrays.fill(container, 0);
45
46         for(int i=0;i<num;i++)
47         {
48             int index = array[i];
49             container[index] ++;
50         }
51
52         return container;
53     }
54
55     private static int [] BubblePaixu(int [] array)
56     {
57         int num = array.length;
58
59         for(int i=0;i<num-1;i++)  //要比较相邻两个数 i=0时是第一个数和第二个数
60                                   //i=num-2时是array[num-2]和array[num-1]最后两个数
61         {
62             for(int j=0;j<num-i;j++)  //外面的一个大循环只能保证把一组数中最小的那个移动到了最后,
63                                       //一次循环后,最小的一个数已经在最后,
64                                       //第j次循环时,最小的j个数已经在最后,就不要再比较了(已经比较过了,当前数肯定比后面的大)
65             {
66                 if(array[i]<array[i+1])
67                 {
68                     int t = array[i];
69                     array[i]=array[i+1];
70                     array[i+1] = t;
71                 }
72             }
73
74             //外层循环控制里程循环中比较数的个数和次数,确保每次内层循环少比较一个数(每次循环确定一个最小的数)
75         }
76
77         return array;
78     }
79
80     private static void QuickPaixu(int from,int to)
81     {
82         int i,j;
83
84         i= from;                  //快速排序的思想是 找一个基准值,保证其左边的数据小于它 右边的数据大于它
85         j= to;
86
87         if(from > to)
88             return ;
89
90         int temp = arr[from];   //比较基准,取待比较数组的第一个点
91
92         while(i!=j)
93         {
94             //从右边开始找第一个小于基准的数
95             while((arr[j] >= temp)&& (j>i))  //直到找到<temp的数退出
96                 j--;
97             while((arr[i] <= temp) && (i<j))   //直到找到>temp的数退出
98                 i++;
99
100             if(i<j)
101             {
102                 int t = arr[j];
103                 arr[j] = arr[i];
104                 arr[i] = t;
105             }
106         }
107
108         //运行到这里i一定等于j
109         arr[from] = arr[i];
110         arr[i]=temp;
111
112         QuickPaixu(from,i-1);
113         QuickPaixu(i+1,to);
114
115         return ;
116     }
117 }


View Code
  冒泡排序的基本思想:取第一个数为基准点,用移动左右指针的方式,找到右边第一个小于基准点的数,再找到左边第一个大于基准的数,运用循环,把大于基准点的数都移到右边,把小于基准点的数都移到左边,再递归此方法排序左边的数和右边的数(注意递归退出的条件)。

  结果如下:



  以上代码参照《啊哈!算法》。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: